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

任何人都可以看清这个吗?

@H_404_11@解决方法
你面对这个错误的原因是因为你在类型之前编写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++类中,有6个默认成员函数: 构造函数 析构函数 拷贝...
#pragma once // 1. 设计一个不能被拷贝的类/* 解析:拷贝只会放生在两个场景中:拷贝构造函数以及赋值运...
C类型转换 C语言:显式和隐式类型转换 隐式类型转化:编译器在编译阶段自动进行,能转就转,不能转就编译...
//异常的概念/*抛出异常后必须要捕获,否则终止程序(到最外层后会交给main管理,main的行为就是终止) try...
#pragma once /*Smart pointer 智能指针;灵巧指针 智能指针三大件//1.RAII//2.像指针一样使用//3.拷贝问...
目录&lt;future&gt;future模板类成员函数:promise类promise的使用例程:packaged_task模板类例程...