Я новичок в шаблонах на C++. Может кто-нибудь объяснить, почему мой специализированный конструктор никогда не будет выполнен. Он работает, когда я удаляю оператор const и reference.Специализация для конструктора класса шаблона
#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
Строковый литерал - это массив lvalue, который может быть преобразован в prvalue указателя.Указатель prvalue не может связываться с ссылкой на не константу lvalue, как 'const char * &'. Вот почему называется первый ctor. – dyp
Кстати, это не частичная специализация. Это явная специализация одной функции-члена. – dyp