-Поиск по дневнику

Поиск сообщений в rss_forum_sources_ru

 -Подписка по e-mail

 

 -Постоянные читатели

 -Статистика

Статистика LiveInternet.ru: показано количество хитов и посетителей
Создан: 29.07.2007
Записей:
Комментариев:
Написано: 80


Можно ли как-то без временных переменных?

Среда, 22 Июля 2020 г. 09:47 + в цитатник
Wound:
Цитата JoeUser @
Как мне в SetCallback передать сразу указатели на функции, без использования временных переменных?

У тебя прям талант придумывать себе проблемы. Убери указатели вообще у CallbackType. Зачем ты их туда написал? С какой целью ты их туда написал? Сам CallbackType - не является разве указателем(ну вернее он является std::function, но сам шаблонный параметр то указатель на функцию)?
Ты у себя прилепил указатель на указатель на функцию и спрашиваешь такие вещи.

https://ideone.com/miVYwD
    #include
    #include
    // ------------------------------------------------------------------------------
    using CallbackType = std::function;
    // ------------------------------------------------------------------------------
    class Karbofos {
    CallbackType Begin = nullptr;
    CallbackType End = nullptr;
    public:
    const std::string Name = "Карбофос";
    void SetCallback(CallbackType B, CallbackType E) {
    Begin = B;
    End = E;
    }
    void Run() {
    if (Begin) (Begin)(this);
    std::cout << "- Не отдам, слон - мой!\n";
    if (End) (End)(this);
    }
    };
    // ------------------------------------------------------------------------------
    void Shef(void* i) {
    std::cout << "- Стой, живодер " << ((Karbofos*)(i))->Name << "!\n";
    }
    // ------------------------------------------------------------------------------
    void Kollega(void* i) {
    std::cout << "- " << ((Karbofos*)(i))->Name << ", ты немец и контрабандист!\n";
    }
    // ------------------------------------------------------------------------------
    int main() {
    Karbofos Object;
    //CallbackType S = Shef;
    //CallbackType K = Kollega;
    Object.SetCallback(Shef,Kollega);
    Object.Run();
    return 0;
    }


Добавлено
Цитата JoeUser @
На SO залепили на умных указателях. Ну выход. Ну почему просто так нельзя как-то?

Ну там днари походу сидят, дергают на свой рейтинг и пишут всякий оцтой. Раньше там чаще можно было встретить полезной информации. Сейчас приходится перелопачивать тонну какого то шлака, чтоб найти вменяемый ответ.

Добавлено
Цитата JoeUser @
Блин, переработался я new CallbackType(), решает ... осталось как-то возможную утечку памяти подпилить хитрыми указателями.

"...Таких извращений Иван не видал!..." © Красная Плесень.

https://forum.sources.ru/index.php?showtopic=419210&view=findpost&p=3834859

Метки:  

 

Добавить комментарий:
Текст комментария: смайлики

Проверка орфографии: (найти ошибки)

Прикрепить картинку:

 Переводить URL в ссылку
 Подписаться на комментарии
 Подписать картинку