История изменений
Исправление asaw, (текущая версия) :
Можно ещё причесать и избавиться от _f.
Вот как-то так:
template <typename F, F>
struct X {};
template <typename Ret, typename Class, typename... Args, Ret(Class::*F)(Args...)>
struct X<Ret(Class::*)(Args...), F> {
Class* _this;
X(Class* c) : _this(c){}
std::function<Ret(Args&&...)> operator() () {
return [&] (Args&&... args) { (_this->*F)(std::forward<Args>(args)...); };
}
};
class A {
public:
A() : foo_functor_producer(this) {}
void foo(int arg1, int& arg2, std::string& str) {}
X<decltype(&A::foo), &A::foo> foo_functor_producer; // нет типов
};
Исходная версия asaw, :
Можно ещё причесать и избавиться от _f.