LINUX.ORG.RU

История изменений

Исправление 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>. Есть риск нарваться на массу неявных преобразований т.е. конструкторов копирования.