您的位置:首页 > 编程语言 > C语言/C++

关于类成员函数在模板中的使用

2015-03-18 21:38 260 查看
实际工作中模板使用还比较多,而且使用类成员函数或者变量作为模板参数的情况是很多的,在这里先小小举个例子。代码非常简单,但是在实际中确实非常常用,而且实用。

//我只是个测试类而已
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;
}没有多余的解释啦,代码灰常简单。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c++