В образце:C++ класс специализация шаблона: почему общие методы должны быть повторно реализованы
#include <iostream>
using namespace std;
class B
{
public:
virtual void pvf() = 0;
};
template <class T>
class D : public B
{
public:
D(){}
virtual void pvf() {}
private:
string data;
};
template <>
class D<bool> : public B
{
public:
D();
virtual void pvf(){ cout << "bool type" << endl; }
};
int main()
{
D<int> d1;
D<bool> d2;
}
я получаю следующее сообщение об ошибке:
test.cpp:(.text+0x1c): undefined reference to `D<bool>::D()'
Обратите внимание, что причина, я не» t просто специализируюсь на D() самостоятельно, я хочу устранить необходимость в строке D<T>::data
в корпусе D<bool>
.
Зачем мне нужно переоснастить D()
в D<bool>
? Похоже, должен быть способ сообщить мне компилятору использовать версию от D<T>
.
Есть ли способ сделать простую специализацию как это без необходимости повторного внедрения методов?
Потому что это совершенно новый тип. –