template<typename Ret, typename...Args>
struct OpenFrame{
explicit OpenFrame(const std::function<Ret(Args...)>& f):m_f(f)
{ }
Ret start(Args...args){
return m_f(args...);
}
std::function<Ret(Args...)> m_f;
};
double print(int i, double d){
cout<<"print(int i, double d): "<<i<<","<<d<<endl;
return i+d;
}
int main(){
std::function func=print;
OpenFrame frame{func};
cout<<frame.start(100,3.14)<<endl;
}