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

实际工作中模板使用还比較多,并且使用类成员函数或者变量作为模板參数的情况是许多的,在这里先小小举个样例。

代码很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;
}
没有多余的解释啦,代码灰常简单。

原文地址:https://www.cnblogs.com/cynchanpin/p/6916313.html