實際工作中模板使用還比較多,而且使用類成員函數或者變量作為模板參數的情況是很多的,在這裡先小小舉個例子。代碼非常簡單,但是在實際中確實非常常用,而且實用。
//我只是個測試類而已
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;
}
沒有多余的解釋啦,代碼灰常簡單。