关于类成员函数在模板中的使用
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;
}没有多余的解释啦,代码灰常简单。
//我只是个测试类而已
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++成员函数指针的使用
- Item 45:使用成员函数模板来接受所有兼容的类型
- 在VC/VS中使用模板成员函数时,出现LNK2001错误
- 关于使用类成员函数作为回调的方法
- C++关于类成员函数在参数列表后加const的作用,以及使用条件
- C++ Template中关于模板类的成员模板函数显示实例化的问题
- 读书笔记 effective c++ Item 45 使用成员函数模板来接受“所有兼容类型”
- 关于使用类成员函数作为回调的方法
- 一个关于模板字符串的使用技巧,以及 String.raw() 函数
- 模板类中可以使用虚函数吗?模板成员函数可以是虚函数吗?
- 关于如何在一个类使用函数指针保存其子类的非静态成员函数
- 关于类成员函数的使用
- C++关于tr1中绑定成员函数的bind使用
- C++模板技术之method_thunk, 使用场景: C++中类成员函数作为回调函数
- Item 45:使用成员函数模板来接受所有兼容的类型
- C++箴言:用成员函数模板接受兼容类型
- Effective STL: Item 44:优先使用与泛型算法同名的成员函数