c函数模板专业化

前端之家收集整理的这篇文章主要介绍了c函数模板专业化前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
给出这个代码
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,而不是之前.

猜你在找的C&C++相关文章