История изменений
Исправление Macil, (текущая версия) :
Как объявить правильно?
Всё очень и очень просто:
std::function<void(A&, int)> callback = static_cast<void (A::*)(int)>(&A::method);
A a;
callback(a, 42);
Короче, такая же шняга как std::mem_fn. Сразу предупреждаю, моего плюсы-фу крайне недостаточно чтобы объяснить почему это работает.
Явное преобразование типов нужно чтобы был выбран правильный перегруженный метод. Может быть, можно как-то более умно поступить, но — ХЗ.
И да, аргументы передаваемые в метод по ссылке, должны идти обёрнутые в std::ref.
Я очень сильно не рекомендую пользоваться <functional>. Есть риск нарваться на массу неявных преобразований т.е. конструкторов копирования.
Исправление Macil, :
Как объявить правильно?
Всё очень и очень просто:
std::function<void(int)> callback = static_cast<void (A::*)(int)>(&A::method);
A a;
callback(a, 42);
Короче, такая же шняга как std::mem_fn. Сразу предупреждаю, моего плюсы-фу крайне недостаточно чтобы объяснить почему это работает.
Явное преобразование типов нужно чтобы был выбран правильный перегруженный метод. Может быть, можно как-то более умно поступить, но — ХЗ.
И да, аргументы передаваемые в метод по ссылке, должны идти обёрнутые в std::ref.
Я очень сильно не рекомендую пользоваться <functional>. Есть риск нарваться на массу неявных преобразований т.е. конструкторов копирования.
Исходная версия Macil, :
5
Всё очень и очень просто:
std::function<void(int)> callback = static_cast<void (A::*)(int)>(&A::method);
A a;
callback(a, 42);
Короче, такая же шняга как std::mem_fn. Сразу предупреждаю, моего плюсы-фу крайне недостаточно чтобы объяснить почему это работает.
Явное преобразование типов нужно чтобы был выбран правильный перегруженный метод. Может быть, можно как-то более умно поступить, но — ХЗ.
И да, аргументы передаваемые в метод по ссылке, должны идти обёрнутые в std::ref.
Я очень сильно не рекомендую пользоваться <functional>. Есть риск нарваться на массу неявных преобразований т.е. конструкторов копирования.