LINUX.ORG.RU

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

Исправление 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.