#include #include class State { public: double i = 0.1; }; class Foo { public: int data = 1; double calc(const State& s) const { return data + s.i; } double getOutput(const State& s) { return _func(this, s); } /*double getOutM(const State& s) { return _funcM(this, s); }*/ template void constructOutput(T(Class::*const memfunc)(const State& s) const) { _func = memfunc; } // _func = [this](const State&s) { memfunc(this, s) } private: std::function _func; }; 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; }