Вызовите член класса std :: function с помощью std :: mem_fn

Мой план состоит в том, чтобы создать несколько классов слушателей, которые имеют предопределенные «ловушки обратного вызова».

В приведенном ниже примере класса Foo имеет «обратный вызов» называется onChange, Во время создания будет установлена ​​функция обратного вызова по умолчанию. Он также может быть установлен на произвольную функцию, которая обеспечивает правильный интерфейс, как показано с объектом f1 и функция callback(),

Проблема в том, когда я хочу вызвать объект-член onChange внутри цикла for компилятор говорит, что я привожу много аргументов. я знаю о проблеме, что я не предоставляю функцию-член std::mem_fn но вместо этого член объекта, который является оберткой функции.

Как мне удается передать аргумент std::function член объекта класса Foo без использования std::bind и использовать std::mem_fn вместо того, как показано в примере?

struct Foo
{
Foo()
{
// default callback
onChange = [](int value)
-> void { std::cerr << "Foo::onChange( " << value << " )" << std::endl; };
}

// class destructor
virtual ~Foo() {}

std::function<void(int value)> onChange;

};void callback(int value)
{
std::cerr << "callback( " << value << " )" << std::endl;
}int main()
{
Foo f0;
Foo f1;
f1.onChange = callback;

auto vec = std::vector<Foo>();
vec.push_back(f0);
vec.push_back(f1);

auto func_wrapper = std::mem_fn( &Foo::onChange );

for (auto f : vec)
{
func_wrapper(f, 42);
}
}

0

Решение

Задача ещё не решена.

Другие решения


По вопросам рекламы [email protected]