通用shared_ptr作为类的成员

时间:2011-12-21 15:45:56

标签: c++ templates shared-ptr

我希望将shared_ptr作为类的成员,但shared_ptr管理的类型每次都不同,并且只在运行时才知道。有没有办法宣布这样的成员并在以后启动它?

2 个答案:

答案 0 :(得分:3)

使用运行时多态,这意味着定义一个公共基类,比如Base,并将公共接口声明为其中的虚函数,然后从它派生并在派生类中实现虚函数。如果您这样做,那么您可以这样使用:

std::share_ptr<Base> ptr;
//now ptr can store an instance of any derived class from Base

如果无法定义公共基类,则可以使用boost::any。如果您不能使用Boost,那么您可以自己定义any类。在此网站和谷歌搜索类型擦除。

以下是一篇两页的关于类型擦除的文章,您可以在second page上找到boost::any的实现(虽然不完整):

答案 1 :(得分:1)

如果类型不相关,您可以使用类似Boost.Any的内容。否则,请执行@Nawaz says