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