class some_value;
typename int (some_value::*some_value_mfp)(int);
template<some_value_mfp func>
int call(some_value &value ,int op){return (value.*func)(op);}
class some_value
{
int value;
public:
some_value(int _value):value(_value){}
int add_by(int op ){return value+=op;}
int sub_by(int op ){return value-=op;}
int mul_by(int op ){return value*=op;}
~some_value();
/* data */
};
int main(int argc, char const *argv[])
{
some_value v0(0);
cout<<call<&some_value::add_by>(v0,1)<<endl;
cout<<call<&some_value::sub_by>(v0,2)<<endl;
cout<<call<&some_value::mul_by>(v0,3)<<endl;
return 0;
}