#include #include class State { public: double i = 0.1; }; class Foo { public: int data = 1; Foo() {} Foo(const Foo&) {} double calc(const State& s) const { return data + s.i; } double getOutput(const State& s) { return _func(s); } template int constructOutput(T(Class::*const memfunc)(const State& s) const) { _func = std::bind(memfunc, static_cast(this), std::placeholders::_1); return 0; } // _func = [this](const State&s) { memfunc(this, s) } private: std::function _func; int hack { constructOutput(&Foo::calc) }; }; int main() { Foo o; State s; //o.constructOutput(&Foo::calc); std::cout << o.getOutput(s) << std::endl; auto oCopy(o); oCopy.data = 10; std::cout << oCopy.getOutput(s) << std::endl; }