Специализация класса шаблонов 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()'

Обратите внимание, что причина, по которой я не специализируюсь только на D () сама по себе, заключается в Я хочу устранить необходимость в строке D :: data в случае D .

Почему мне нужно повторно реализовать D () в D ? Похоже, у меня должен быть способ указать компилятору использовать версию из D .

Является есть ли способ сделать такую ​​простую специализацию, как эта, без повторной реализации методов?

14
задан Matthieu M. 9 January 2012 в 15:14
поделиться