我是新来的模板在C++中。 任何人都可以解释为什么我的专业构造函数永远不会被执行。 它在我删除const和引用操作符时起作用。专业模板类构造函数
#include<iostream>
#include<string>
using namespace std;
template<typename T>
class CData
{
public:
CData(const T&);
CData(const char*&);
private:
T m_Data;
};
template<typename T>
CData<T>::CData(const T& Val)
{
cout << "Template" << endl;
m_Data = Val;
}
template<>
CData<char*>::CData(const char* &Str)
{
cout << "Char*" << endl;
m_Data = new char[strlen(Str) + 1];
strcpy(m_Data, Str);
}
void main()
{
CData<int> obj1(10);
CData<char*> obj2("Hello");
}
输出是
模板
模板
'main'必须返回'int',而不是'void'。此外,'strcpy'和'strlen'的头文件是'',而不是''。 –
dyp
2014-08-27 13:50:13
字符串文字是一个数组左值,可以将其转换为指针prvalue。指针prvalue不能绑定到非常量左值引用,如'const char *&'。这就是为什么第一个ctor被调用的原因。 – dyp 2014-08-27 13:52:32
顺便说一句,这不是一个部分专业化。它是一个单一成员函数的显式专业化。 – dyp 2014-08-27 13:56:45