En la muestra:C++ especialización de clase de plantilla: ¿por qué los métodos comunes necesitan ser re-implementado
#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;
}
me sale el siguiente error:
test.cpp:(.text+0x1c): undefined reference to `D<bool>::D()'
Tenga en cuenta que la razón por la que don' Sólo especializo D() por si mismo. Quiero eliminar la necesidad de la cadena D<T>::data
en el caso D<bool>
.
¿Por qué tengo que volver a implementar D()
en D<bool>
? Parece que debería haber una forma de decirle al compilador que use la versión del D<T>
.
¿Hay alguna manera de hacer una especialización simple como esta sin tener que volver a implementar los métodos?
Porque es un tipo completamente nuevo. –