Задать вопрос
@sitev_ru
sitev.ru - мой блог ...

C++11 и callback-функции... Есть что-нибудь новое?

В старом С++ работал указатель только на обычные функции, а функции - члены класса нельзя было присваивать. В C++11 появилось что-нибудь новое для реализации callback-функций?
  • Вопрос задан
  • 3082 просмотра
Подписаться 2 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 2
@hiloader
Появился враппер std::function. С ним вы можете использовать и функцию, и функтор. Удобно использовать с лямбдами или с std::bind.
#include <iostream>
#include <functional>

using namespace std;

class MyClass {
public:
        void hello() {
                cout << "Hello from " << __LINE__ << endl;
        }
};


static void hello() {
        cout << "Hello from " << __LINE__ << endl;
}

static void do_with_callback( std::function<void()> && callback ) {
        callback();
}

int main() {
        MyClass cl;

        do_with_callback( std::function<void()>(hello) ); // VC 2012 fix
        do_with_callback( std::bind(&MyClass::hello, &cl) );
        do_with_callback( [&](){
                cl.hello();
        } );

        return 0;
}

Вывод:
Hello from 15
Hello from 9
Hello from 9
Ответ написан
@mayorovp
В старом С++ работал указатель только на обычные функции, а функции - члены класса нельзя было присваивать.
Все можно было делать, главное - понимать что именно делаешь.

struct foo {
  void bar();
};

typedef void (foo::*member_ptr) ();
member_ptr p = &foo:bar;

foo f;
(f.*p)(); // косвенный вызов bar
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы