我想放置任何类型的对象(对象、对象等)集成到一个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;
};发布于 2011-03-28 18:15:13
你不能。这样的声明应该是什么样子的,它可以返回各种类型?这是不可能的。您必须将ObjectBase*转换为正确的Object<T>*,然后使用getMember函数。只有当所有T共享一个公共基类时才有可能,所以您可以返回一个指向该基类的指针。但这将对T产生严格的约束。
发布于 2011-03-28 18:29:35
这是不可能做到的。编译器必须预先知道有多少不同的虚函数(和重载)可用,但在您的示例中,您正在考虑基于派生类型的新的潜在实例化按需添加新的虚成员函数。
在大多数情况下,将完全不相关的对象放在同一个容器中不是一个好的设计选项,但对于少数实际相关的情况,您可以使用不同的类型(考虑boost::any或boost:: variant,这取决于您的实际需求。这是一个捆绑的、经过测试的变体类型实现,您可以直接使用它。
https://stackoverflow.com/questions/5457423
复制相似问题