C模板:模板类中的部分模板函数专业化
发布时间:2020-12-16 09:37:51 所属栏目:百科 来源:网络整理
导读:我想专门化模板类中的特定功能. 例如: templateclass Tclass A { public : void fun1(T val); void fun2(T val1,T val2);};template class Tvoid AT::fun1(T val){ // some task 1;}template class Tvoid AT::fun2(T val1,T val2){ // some task 2;}templat
我想专门化模板类中的特定功能.
例如: template<class T> class A { public : void fun1(T val); void fun2(T val1,T val2); }; template <class T> void A<T>::fun1(T val) { // some task 1; } template <class T> void A<T>::fun2(T val1,T val2) { // some task 2; } template <> void A<char*>::fun2(char* val1,char* val2) { // some task 2 specific to char*; } 当我做这样的事情时,我得到错误说fun2()的多个定义 解决方法
你的方法fun2()本身不是模板方法,尽管它是模板类的成员.我没有找到合适的技术术语,但简单来说,专门的fun2()将创建正常函数定义的效果.将定义放在头文件中会给您带来多个定义错误.
要解决这个问题,只需输入一个内联关键字,链接器错误就会消失! template <> inline // <----- 'inline' will prompt to generate only 1 copy void A<char*>::fun2(char* val1,char* val2) { // some task 2 specific to char*; } 编辑:这解决了链接器错误.但你仍然不能使用A< char *> :: fun2.归根结底,它归结为你需要专门化整个A< char *>类的事实.或者在A< T>内重载fun2(char *,char *). template<class T> class A { // constructors public: //... void fun2(char* val1,char* val2) { //specific case when T = char* } }; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |