假设我有一个模板类
template<class T>
class A;
template<>
class A<int>
{
public:
void print(){ std::cout << "I am an int !" << std::endl; }
};
template<>
class A<double>
{
public:
void print(){ std::cout << "I am a double !" << std::endl; }
};
现在,如果我想将 A 的每个可能实例存储在同一个容器中,比如说一个向量。
然后经典(也是我知道的唯一方法)是使用纯虚拟 print() 成员函数创建另一个类 A_base,并将指向 A_base 的指针存储为初始化为 A 的实例。使用 new 执行此操作可能会引发内存泄漏和/或异常不安全,因此解决此问题的合理方法是使用 boost::shared_ptr 或 std::tr1::shared_ptr,因为复制 std::auto_ptr 可能会导致所有权问题和未定义行为!
有什么方法可以在不包括 boost 或 c++0x 依赖项的情况下进行类型擦除?:)
谢谢 !