动态模板实例化

use*_*369 13 c++ templates

我有一个类模板,我需要声明该类的对象,而不定义类型参数,以便我可以稍后有条件地定义它们,例如:

template<typename T>
class A{
public:
    A(T v){var = v};
    ~A(){};

    T var;
}

int main(){
    A<>* object; // Or sometihng along these lines...?
    if(/* something*/)
        object = new A<float>(0.2f);
    else{
        object = new A<int>(3);
    }
}
Run Code Online (Sandbox Code Playgroud)

Ben*_*ley 8

嗯,你当然不能那样做.你必须使A派生自另一个类,例如:

template<typename T>
class A : public B {
public:
    A(T v){var = v};
    ~A(){};

    T var;
}

int main(){
    B* object;
    if(/* something*/)
        object = new A<float>(0.2f);
    else{
        object = new A<int>(3);
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 究竟.你不能像在OP中那样做的原因是模板在编译时完全扩展; 在运行时,模板实例只是常规类和函数.模板扩展后,它们的基于模板的关系将丢失. (3认同)
  • 嗯,这需要“纯虚拟”功能可以在没有任何严重脑损伤的情况下使用,但这是一个解决方案。 (2认同)
  • 对于基类恕我直言,最好使用虚拟析构函数。 (2认同)