c函数模板专业化
发布时间:2020-12-16 03:27:30 所属栏目:百科 来源:网络整理
导读:给出这个代码: class X{public: template typename T void func( const T v );};templatevoid X::func int ( const int v ){}templatevoid X::func char * ( const char * v ) // 16{} 当我编译它,我得到以下错误. test.cpp:16: error: template-id 'funcch
给出这个代码:
class X { public: template< typename T > void func( const T & v ); }; template<> void X::func< int >( const int & v ) { } template<> void X::func< char * >( const char * & v ) // 16 { } 当我编译它,我得到以下错误. test.cpp:16: error: template-id 'func<char*>' for 'void X::func(const char*&)' does not match any template declaration 任何人都可以看清这个吗? 解决方法
你面对这个错误的原因是因为你在类型之前编写const.虽然这是常见的做法,但不利于理解const / volatile限定词(cv-qualifier)的工作原理.
在这种情况下,当T为char *时,const T不表示const char *.这意味着char * const,因为T是char *,无论T的任何一面都放在const上,它的行为就像在T右边的const一样,也就是指针本身就不会是const . 如果您将规则总是将const或volatile放在类型的右侧,那么很容易避免这种混淆.例如,当T是char *到char * const时,它可以直观的展开T const. 这是增加资源的原因,您看到类型之后的cv-qualifiers,而不是之前. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |