关于类成员函数在模板中的使用
实际工作中模板使用还比較多,并且使用类成员函数或者变量作为模板參数的情况是许多的,在这里先小小举个样例。
代码很easy,可是在实际中确实很经常使用,并且有用。
//我仅仅是个測试类而已
class TestClass
{
public:
void testFunc(int val){}
double testFunc2(double val){return 0;}
public:
int m_testVal;
};
//也会用到的写法,在不是模板的情况下还挺有用的
typedef void (TestClass::*test_func)(int);
//不说boost。不谈lambda,仅仅仅仅提模板而已
//成员函数的情况
template<class _Tp, class _Param, class _Ret>
void test_call(_Tp* obj, _Ret (_Tp::*_func)(_Param), _Param _p)
{
(obj->*_func)(_p);
}
//成员变量。这个用的不多。主要是在Imp下会用到
template<class _Tp, class _Param>
void test_member(_Tp* obj, _Param _Tp::*value, _Param _p)
{
obj->*value = _p;
}
int main(int argc, char *argv[])
{
TestClass *tt = new TestClass;
test_call<TestClass, int, void>(tt, &TestClass::testFunc, 6);
test_call<TestClass, double, double>(tt, &TestClass::testFunc2, 6.9);
//这个在非模板情况下比較经常使用
test_func f1 = &TestClass::testFunc;
(tt->*f1)(7);
//成员变量的使用
test_member(tt, &TestClass::m_testVal, 5);
delete tt;
return 1;
}没有多余的解释啦,代码灰常简单。posted on 2017-05-28 18:24 cynchanpin 阅读(742) 评论(0) 收藏 举报
浙公网安备 33010602011771号