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

2015-07-20 17:09:40 · 作者: · 浏览: 3

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

?

//我只是个测试类而已
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
  
   
void test_call(_Tp* obj, _Ret (_Tp::*_func)(_Param), _Param _p)
{
	(obj->*_func)(_p);
}

//成员变量,这个用的不多,主要是在Imp下会用到
template
   
     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
    
     (tt, &TestClass::testFunc, 6); test_call
     
      (tt, &TestClass::testFunc2, 6.9); //这个在非模板情况下比较常用 test_func f1 = &TestClass::testFunc; (tt->*f1)(7); //成员变量的使用 test_member(tt, &TestClass::m_testVal, 5); delete tt; return 1; }
     
    
   
  
没有多余的解释啦,代码灰常简单。

?