我想将任何一种对象(对象,对象等)放入一个shared_ptr中。因此,我创建了基类并使用shared_ptr。

但是,我怎么能宣布

T getMember();

在基类中,所以我可以调用ObjectBase.getMember?
class ObjectBase
{
public:
  //virtual getMember HOWTO?
};

template<typename T>
class Object : public ObjectBase
{
public:
  Object(T x):member(x) { }
  T getMember() { return member; }

private:
  T member;
};

最佳答案

你不能这样的声明应如何返回所有类型呢?只是不可能。您必须将ObjectBase*转换为正确的Object<T>*,然后使用getMember函数。只有所有T共享一个公共(public)基类,才有可能,因此您可以返回一个指向该基类的指针。但这将对T施加严格的约束。

09-04 01:40