• Почему int * оценивается как int * вместо int * * при подстановке в шаблонный параметр?

    @MarkusD Куратор тега C++
    shurshur
    int i;
    int * pi;

    Взятие значения неинициализированной переменной является UB.
    Ты сейчас что-то сделал и что-то понял, но немного не то, что из этого кода можно понять. Просто потому что у тебя в коде теперь есть UB.

    Правильно было бы написать так.
  • Почему int * оценивается как int * вместо int * * при подстановке в шаблонный параметр?

    @MarkusD Куратор тега C++
    Qubc,
    Обычно, если шаблонный тип внутри класса - то там всё логично. T или T* -реализует ровно тот тип, который передан в шаблонном аргументе или который будет выведен. А вот в этом примере ничего не понятно в этом смысле.

    Тебе надо просто читать больше книг по метапрограмированию. Александреску, Саттера, Джосаттиса, например. Много и долго. У тебя сейчас нет понимания как язык работает с шаблонными аргументами. Описанное тобой в цитате неверно.

    Ошибки у тебя и в вопросе. Тебе стоит почаще смотреть инсайты своих шаблонов.
    f1<int>(i); // f1<int>(i); // T == int // OK
    f1<int*>(pi);// f1<int*>(pi); // T == int * //  OK
    
    f2<int>(&i); // f2<int>(&i); // i is int // &i is int* // T == int * // неправильно, T == int
    f2<int>(pi); // f2<int>(pi); // pi is int * // T == int * // неправильно, T == int
    
    f2<int*>(&pi); // f2<int*>(&pi); // T == int*


    Прочитай про автоматический вывод шаблонных аргументов для шаблонов функций. Я недавно даже ответ на эту тему писал.
  • Как добавить папку в проект dll Visual Studio?

    Павел Соколов, нет, с ошибкой LNK2005 ты определенно не разобрался. Вот что inline? Для чего именно нужен inline и когда его уместно писать? Думаешь - затычкой какой-то дырку заткнул и можно жить дальше?
    Дальше тебя с этим кодом ждет только больше сюрпризов.
    По части PCH. Просто отключи его. Не используй того, механизмов чего не понимаешь. В программировании ты только время тратишь, а химики и механики, например, умирают позабыв об этом правиле.

    Когда заменил ../pch.h на pch.h все заработало, но почему я не понимаю.

    Это потому что тебе еще нужно разобраться с механикой форм директивы #include[?]. Подавляющее большинство профессиональных разработчиков сами не понимают как директива работает. Но это не значит что и тебе тоже можно.
    Попутно стоит разобраться и в том, что такое Include directories, как они работают, почему туда нельзя совать все что вздумается и как это отражается на поведении формы #include "".
  • Как добавить папку в проект dll Visual Studio?

    Павел Соколов, еще есть вопрос.
    Подскажи, кто тебя научил PCH-файл подключать в свои заголовки?

    почему с пакой ошибка 1010

    С папкой - это с фильтром в проекте студии или это с папкой в файловой системе, где у тебя хранится исходный код?

    ошибка 2005

    Ошибка LNK2005 однозначно говорит о том, что у тебя в коде нарушено ODR.
    Предшествующая этой ошибка LNK1169 однозначно показывает на само нарушение ODR.

    ошибка 1010

    Ошибка C1010 не менее однозначно говорит о том, что ты определенно что-то не так делаешь с PCH-заголовком.

    Еще один прямой вопрос: какого конкретно эффекта ты хотел добиться, включая в своем коде предкомпиляцию и встраивая PCH-заголовок в свой код?
  • Как добавить папку в проект dll Visual Studio?

    Павел Соколов, у тебя в вопросе сейчас воды много. Суть вопроса не читается. Читается так, будто ты на что-то пожаловался и решать тебе ничего не нужно.
    Оставь в своем вопросе только то, о чем ты спрашиваешь. Это чтобы и другие могли понять о чем у тебя вопрос.
  • Как получить доступ к контенту в APK?

    Игорь, майору про выдумки расскажешь.
    В моих что ли интересах тебя от уголовки останавливать? Нет. Делай что хочешь.
    Я просто показываю что, как минимум, два года отпуска на перловой диете ты себе обеспечиваешь.
    Правила еще раз перечитай и нарушения в вопросе исправь.
  • Как получить доступ к контенту в APK?

    Есть одно дополнение.
    Резервное копирование APK в принципе не сохраняет локальные данные или кэш приложения.
  • Как получить доступ к контенту в APK?

    Игорь, П3.4, П5.5, П5.12, Ст.272 УК РФ.
    Ты ничего не поменял.
  • Как получить доступ к контенту в APK?

    Igor Pietrashvsky, каюсь. Но подстановка меншена сделала это за моей спиной. :)
  • Как получить доступ к контенту в APK?

    Igor Pietrashvsky
    Приветствую друзья!

    П3.4 регламента работы сервса.

    Вопрос очень странный.

    П3.2 регламента работы сервиса.

    Ко мне обратился человек с просьбой распарсить некий интернет магазин, который существует только в виде мобильного приложения.

    П5.3 регламента работы сервиса.

    Может я чего не знаю.
    Реально ли получить доступ к контенту в приложении.

    П5.5 регламента работы сервиса.

    Скажу больше, я знаю как получать доступ к управляющим элементам например в Windows приложениях.

    Ст.272 УК РФ. До 7 лет тюрьмы.

    Дальше продолжать? Или ты уже понял что ходишь по реально тонкому льду?
  • Можно ли вызвать деструктор void*?

    @MarkusD Куратор тега C++
    Павел Соколов,
    Вы мне предлагаете не то, и я поясняю почему это не то.

    Когда не разобрался в предлагаемом подходе, принято сразу говорить что ты не разобрался, а не пытаться обвинить человека в том, что он не то тебе рекомендует.

    Вот и давай разбираться.
    Я говорю - shared_ptr не вызовет деструктор класса. Утечка есть, все плохо.

    Проверь этот код. Где в нем утечка и почему в нем не должен вызываться деструктор?
    Предлагаю просто не утверждать того, в чем ты не убедился лично.

    Самостоятельное признание факта, что ты не разобрался, повышает твою ценность. Попытка клеветы в отношении предложившего тебе помощь снижает твою ценность катастрофически.
    Ты всегда имеешь право попробовать разобраться самостоятельно и попросить помощи если это не получается. Но только не в случае когда ты уже полез в перепалку.
  • Можно ли вызвать деструктор void*?

    @MarkusD Куратор тега C++
    Павел Соколов,
    Он не сможет удалить класс, если ему дать void.

    Я сейчас не совсем понимаю, ты хочешь мне это объяснить или ты это спрашиваешь?

    А вот сделать free - да, но это все равно будет утечкой памяти

    Это будет не утечка памяти, а утечка ресурса. Это совсем разные эффекты с совсем разными последствиями.

    Еще я не понимаю цели двух странных цитат в начале твоего комментария, одна из которых явно стала жертвой автоматического переводчика.

    Тебе нужно помочь разобраться с умными указателями и с тем, почему я предложил тебе обратить на них внимание? Или ты хотел выразить свое мнение по поводу умных указателей?
  • Можно ли вызвать деструктор void*?

    @MarkusD Куратор тега C++
    Павел Соколов, зачем тебе все эти сложности, когда есть умные указатели?
    Посмотри как работает std::shared_ptr<void>[?]. Если еще будешь использовать std::make_shared[?], то вообще обойдешься одним выделением памяти.
    Тебе на самом деле незачем работать с new/delete.
    Наружу умный указатель тебе незачем отдавать, просто держи его в векторе чтобы он правильно удалил подконтрольный объект в нужный тебе момент.
  • Как исправить ошибку в коде из-за сравнения с кириллицей/русским алфавитом?

    @MarkusD Куратор тега C++
    Раз С++20, то, наверное, можно и std::u8string[?] посоветовать?
  • Как получать и обрабатывать координаты мыши в окне OpenGL?

    @MarkusD Куратор тега C++
    NimuraF, ну хорошо. Я сейчас просто накидаю тебе информации. Если у тебя с ней не свяжется сразу, то я сделаю прям развернутый ответ снова, когда найду для этого свободное время. Со временем у меня всегда сложно.

    Матрица трансформации - это тензор для перехода из одного пространства в другое.
    Например, у тебя может быть сцена, в которой у каждого узла может быть своя матрица трансформации. При этом, эта матрица у узла всегда считается в локальных координатах родительского узла. И только корневой узел сцены позиционируется в глобальных координатах сцены.
    Как в этой ситуации узнать глобальные координаты сцены для какого-то произвольного дочернего узла этой сцены?
    Нужно последовательно перейти из локального пространства этого дочернего узла в пространство родительского, потом следующего родительского и так далее до пространства, в котором находится корневой узел. За каждый переход отвечает тензор перехода узла сцены. А если перемножить эти тензоры между собой, получится один ровный тензор перехода из локального пространства дочернего узла в глобальное пространство сцены.
    Это - первый ключ. SRT-матрица объекта сцены - это тензор перехода от локальных координат этого узла к локальным координатам родительского узла.

    Инверсия матрицы. Обратная матрица обратной не просто так называется. Если матрица является синим порталом для перехода из одного пространства в другое, то ее обратная матрица является уже рыжим порталом.
    У тебя есть матрица вида, матрица проекции, характеристики вьюпорта и оконные координаты мышки.
    Какую матрицу ты используешь чтобы геометрия оказалась именно на экране? А ведь именно эта матрица отвечает за переход геометрии из глобального пространства сцены в локальное пространство фрустума камеры.
    И дальше твоя геометрия еще отсекается по вьюпорту.
    Это - ключ второй. Инверсия SRT-матрицы узла позволяет перейти от координат родителя к локальным координатам узла.

    Координаты мышки у тебя находятся на плоскости вьюпорта после их локализации в окне. Из вьюпорта ты можешь перенести их в пространство фрустума камеры, оттуда - в глобальное пространство своей сцены, получив или вектор в 3D, или точку в 2D. И вот когда ты получаешь свою мышку в глобальном пространстве сцены, дальше ты можешь делать все что угодно с объектами всей сцены.

    Дальше попробуй сам найти всю информацию. Я тебе обещаю бурю эмоций от процесса и гору удовольствия в конце. :)
  • Как получать и обрабатывать координаты мыши в окне OpenGL?

    @MarkusD Куратор тега C++
    NimuraF , как у тебя дела с пониманием линейной алгебры и операция над матрицами?
    У тебя ведь все так же 2D-пространство в игре?
  • Почему выводит -nan?

    @MarkusD Куратор тега C++
    MuffinLover , там 170 строк кода. Тебе нужно выделить короткую часть, где именно у тебя получается -nan и выписать ее в вопрос, правильно при этом оформив, согласно П3.8 регламента.
    Еще тебе следует описать все что ты наблюдаешь во время трассировки этого кода.
  • В чем преимущество статического массива перед динамическим?

    @MarkusD Куратор тега C++
    daniel_pr,
    Кстати, "у вас не статический массив" -- насколько я понимаю, это субъективно.

    Субъективность всю нужно оставлять за дверью, когда заходишь в программирование. Есть стандарт. Стандарт существует, прежде всего, для тебя. Другие люди не будут тебя понимать если ты будешь разговаривать на каких-то субъективных терминах.

    Между тем. "Статический массив" - это широко распространенное заблуждение. Что у тебя в книге называется статическим массивом, в стандарте называется массивом константного размера в C или массивом в C++.
    Динамический массив так и называется в C++, т.к. эксплуатирует не собственный термин, а термин массива из C++ и динамическое время хранения сущности.
    В этом отношении статическим массивом будет являться массив со статическим временем хранения.

    Эту всю терминологию путать нельзя. Тебя понять не смогут.
  • Склеить несколько текстур в одну?

    Евгений Петряев, я тебе дал прямой выбор из двух вариантов. Тебе достаточно просто выбрать один из двух.
    Но если ты не заинтересован в решении, то дело, конечно, твое.