使用模板成员数据

Using Template Member data

本文关键字:成员 数据      更新时间:2023-10-16

我试图使用一个基于模板的类作为另一个类的成员。另一个类将根据其数据成员值决定基于模板的成员应该使用的数据类型。为此,我使用了一些多态性来决定运行时的实例化。

class Base
{
public:
    virtual void print() = 0;
};
template <typename T>
class templateDynamic : public Base
{
public:
    templateDynamic();
    ~templateDynamic();
    void print();
};
    template <typename T>
templateDynamic<T>::templateDynamic()
{
}
template <typename T>
templateDynamic<T>::~templateDynamic()
{
}
template <typename T>
void templateDynamic<T>::print()
{
}
class Holder
{
private:
    Base * m_ABC;
public:
    Holder(int a);  
    void print();
};
void Holder::print()
{
    m_ABC->print();
}
Holder::Holder(int a)
{
    if(a == 1)
      m_ABC = new templateDynamic<int>();
    else
      m_ABC = new templateDynamic<float>();
}
int main()
{
    Holder aHolder(1);
    aHolder.print();
    Holder aHolder2(2);
    aHolder.print();
}

打印函数将根据T的类型进行打印,是int还是float。此时我遇到了一个链接器错误。

错误LNK2019:未解析的外部符号"public:__thiscalltemplateDynamic::templateDynamic(void)"(??0$templateDynamic@H@@QAE@XZ)在函数"public:__thiscall Holder::Holder(void)"(??0 Holder@@QAE@XZ)

您尚未定义templateDynamicHolder 的构造函数