Задать вопрос
  • Как убрать исключение System.IO.FileLoadException?

    @dmitryKovalskiy
    программист средней руки
    Удалите ВСЕ свои рукоблудия со сборками.
    Установите в студию nuget если его нет.
    Выполните в Package manager console 2 команды -
    Install-Package VkNet
    Install-Package HtmlAgilityPack
    Ответ написан
    5 комментариев
  • Как убрать исключение System.IO.FileLoadException?

    Не надо ничего качать с сайтов и распаковывать.
    Открываете свой проект в Visual Studio и сразу идете в менеджер нугет пакетов и оттуда находите и инсталлируете то что вам нужно.

    VK.NET и HtmlAgilityPack там есть.

    https://www.nuget.org/packages/

    Все происходит автоматически включая обновления и зависимости. Для этого нугет и изобрели.
    Общее представление о NuGet
    Ответ написан
    1 комментарий
  • Как узнать администратора группы с помощью VK.API?

    Администраторы скрыты у всех групп, открыты только контакты. Если вам нужна информация из этого блока - вызываете groups.getById с ключом contacts в поле fields
    Ответ написан
    Комментировать
  • Странный дизайн Rust?

    Rust это не C++. Почему он должен брать термины из C++?

    В Java вон тоже ссылки - это указатели в терминологии C++.

    Более того, ссылка от указателя отличается лишь абстракцией. В памяти это будут одинаковые ячейки, содержащие адрес.
    Ответ написан
    Комментировать
  • Где найти задачи для Delphi (практикумы)?

    gbg
    @gbg
    Любые ответы на любые вопросы
    В 2003 году, когда покойница была еще популярна.
    Ответ написан
    Комментировать
  • Как защитить своё приложение и его код?

    Специальной регистрации авторских прав не требуется, права на созданный вами код принадлежат вам изначально. Чтобы при необходимости иметь возможность доказать приоритетное авторство кода - включайте копирайты в код, периодически создавайте архивы кода и и получайте для архива сертификат с хэшем и подписанной отметкой времени, например
    supporttest.digistamp.com/account/create.jsp#showI...
    сохраняйте архивы и полученные сертификаты.
    Загружать сам файл не обязательно, можно самостоятельно вычислять хэш и загружать только его.
    Ответ написан
    Комментировать
  • Как защитить своё приложение и его код?

    1/ https://habrahabr.ru/company/intel/blog/169505/, https://habrahabr.ru/company/zarlaw/blog/298484/
    2/ привязка к сервису компании и серверам в интернете
    Ответ написан
    Комментировать
  • Как защитить своё приложение и его код?

    newross
    @newross
    Product owner
    В России есть защита кода от несанкционированного использования в своих разработках путем получения авторского свидетельства.
    Только смысла в этом нет никакого. Отрефакторили, переименовали переменные - и с точки зрения закона это уже совершенно другой код.
    Ответ написан
    7 комментариев
  • Как убрать пин код с планшета?

    Android97
    @Android97
    Бэкенд и немного фронтенд разработчик
    Возможно у тебя включен VPN, или установлен в настройках.
    В разделе сети нажми на ещё, там впн. Если есть что то - удали, и кнопки разблокируются.
    Ответ написан
    Комментировать
  • Как вынести за пределы класса шаблонный оператор приведения?

    tsarevfs
    @tsarevfs Куратор тега C++
    C++ developer
    class A
    {
    public:
       template <typename T>
      operator T() const;
    };
     
    template <typename T>
    A::operator  T() const
    {   
       return T();
    }
    Ответ написан
    Комментировать
  • Как убрать пин код с планшета?

    Frankenstine
    @Frankenstine
    Сисадмин
    Первый в гугле же
    www.samsung.com/ua_ru/support/skp/faq/1035880
    Ответ написан
    Комментировать
  • Где в Code::Blocks можно настроить функцию перехода по элементам кода (вызов/объявление/реализация)?

    @MiiNiPaa
    Клик правой кнопкой по имени → find implementation/find declaration/find occurences/etc.
    Ответ написан
    Комментировать
  • Передача функции - шаблоны или std::function?

    Nipheris
    @Nipheris Куратор тега C++
    template<typename Func> void MyFunc (const Func & otherFunc);

    void MyFunc (const std::function<void()> & otherFunc);

    Это очень разные ситуации. Во-первых, в первом случае функция будет шаблонной. С шаблонными и нешаблонными функциями нужно обращаться по-разному, я думаю вы уже знаете как и почему. Код первого (шаблонного) варианта будет компилиться только при использовании MyFunc, и большинство проверок типов будет происходить именно в этот момент. Ну и понятное дело, шаблонный вариант нужно класть в хедер.

    С другой стороны, почему-то никто не упомянул такую важную разницу:
    class overloaded_functor {
    public:
    	bool operator()(int a) const { return a > 10; }
    	bool operator()(double a) const { return a > 10.0; }
    	bool operator()(const std::string& a) const { return a.size() > 10; }
    };
    
    template <typename Func>
    void foo(Func f) {
    	// Все варианты компилятся и работают (т.к. сама шаблонная функция foo и все применения оператора вызова к f компилятся ПОСЛЕ того как мы написали foo(overloaded_functor()) );
    	f(3);
    	f(5.4);
    	f("Blah");
    }
    
    void bar(std::function<bool(int)> f) {
    	f(3);
    	// Компилится, но, как и ожидаемо, конвертит double к int, чего мы в нашем случае не хотим
    	f(5.4);
    	// Не компилится вовсе
    	f("Blah");
    }
    ...
    foo(overloaded_functor());
    bar(overloaded_functor());


    std::function по-определению требует указания конкретного типа функции/функтора, которую он оборачивает, поэтому std::function не может работать с перегруженным функтором. Это не так часто нужно, но бывает, например visitor часто реализуется именно таким функтором с несколькими вариантами оператора вызова.

    На всякий случай отмечу, что я ни в коем случае не говорю, что std::function недостаточно мощный вариант. Наоборот, его нужно использовать в большинстве случаев, т.к. в большинстве случаев нужно функция конкретного типа (конкретной сигнатуры и конкретного возвращаемого значения). Однако разницу следует понимать, т.к. эти варианты используются в разных ситуациях.
    Ну и понятное дело, обычный указатель на функцию неудобен, т.к. не позволяет захватить контекст. В Сях для этого существует паттерн userData, и всякий разработчик библиотеки, которая использует callback-и, реализует этот паттерн. В Плюсах для этого есть std::function.
    Ответ написан
    Комментировать
  • Передача функции - шаблоны или std::function?

    Первый вариант:
    template<typename Func> void MyFunc (const Func & otherFunc);

    Гарантирует, что otherFunc будет заинлайнена в MyFunc, то есть такой вариант предпочтителен там, где требуется максимальная производительность. Но шаблонные функции не могут быть виртуальными. То есть такой вариант очень хорошо подходит для функций-утилит, и плохо подходит для методов публичного API и на границах модулей, так как там как раз инлайн не нужен, а нужны виртуальность и сокрытие реализации.

    Важное замечание! Приведённый код не совсем корректен, всегда в таких случаях используйте передачу по универсальной ссылке:
    template<typename Func> void MyFunc (Func&& otherFunc);

    Такой вариант покрывает и константные функторы, и те, которым необходима мутабельность для работы. Если вы планируете сохранить функтор, то это ещё и позволит воспользоваться perfect forwarding -- по сути, единственный способ, корректно работающий с любым переданным функтором:
    field = std::forward<Func>(otherFunc);

    Второй вариант:
    void MyFunc (const auto & otherFunc);
    Можно использовать, если вам не нужен тип функтора. По сути он эквивалентен предыдущему.

    Третий вариант:
    void MyFunc (const std::function<void()> & otherFunc);

    Возьмите отрицание моих предыдущих аргументов и примените сюда. Можно использовать с виртуальными функциями, больше подходит для API, но теряет в производительности. А именно, вызов otherFunc эквивалентен вызову виртуальной функции.

    Четвёртый вариант:
    void MyFunc (const void (&otherFunc)());
    Работает только с простыми, глобально определёнными функциями. Вместо этого практически всегда стоит использовать std::function.
    Ответ написан
    Комментировать
  • Ссылка на лямбду?

    tsarevfs
    @tsarevfs Куратор тега C++
    C++ developer
    Для лямбд, которые не захватывают переменные в своих [], определен оператор преобразования в указатель на функцию(ClosureType::operator ret(*)(params)()). Собственно поэтому происходит неявный каст в вашем 1 примере. Для ссылки компилятор не находит подходящего преобразования.
    Последний пример сначала преобразует лямбду к указателю и разыменовывает его уже просто как указатель.
    Ответ написан
    Комментировать
  • Где кто видел книгу с максимально подробным=простым описанием с++?

    AxisPod
    @AxisPod
    Ээээ, простое и подробное? Одновременно? Вы уверены? Это книга в стиле: "Строим термоядерный реактор дома за 2 дня"?
    Ответ написан
    1 комментарий
  • Почему этот код вылетает при запуске?

    sfi0zy
    @sfi0zy
    Creative frontend developer
    Я хочу спокойно без лишних велосипедов конвертировать строки в числа и обратно.

    Так и конвертируйте, кто вам мешает?
    #include <iostream>
    #include <string>
    
    int main()
    {
        std::string number = "123456";
    
        int value = std::stoi(number);
        std::cout << value; // 123456 (int)
    
        std::string number2 = std::to_string(value);
        std::cout << number2; // 123456 (string)
    }
    Ответ написан
    3 комментария
  • Почему этот код вылетает при запуске?

    @MiiNiPaa
    Ну, вы пишете результат конверсии в память, на которую указывает указатель result. А он указывает... куда?

    И чем itos/to_string не угодили? Зачем велосипеды?

    EDIT:
    так как функция нестандартная, она просто не будет подключаться если компилировать код c -c++11 или -c++14 .
    Простите, что?
    Ответ написан
    5 комментариев
  • Как писать тесты?

    MAKAPOH
    @MAKAPOH
    многостаночник
    Если речь идёт о модульных тестах то по сути это отдельные маленькие програмки которые проверяют работоспособность различных частей вашего проекта. В принципе это могут быть отдельные проекты в IDE. Для облегчения написания таких программ существуют специализированые библиотеки вроде google test.
    Ответ написан
    Комментировать