首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >模板方法覆盖非模板方法

模板方法覆盖非模板方法
EN

Stack Overflow用户
提问于 2011-03-28 18:07:02
回答 2查看 274关注 0票数 2

我想放置任何类型的对象(对象、对象等)集成到一个shared_ptr中。所以我创建了基类并使用了shared_ptr。

但是,我怎样才能声明

代码语言:javascript
复制
T getMember();

这样我就可以调用ObjectBase.getMember了吗?

代码语言:javascript
复制
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;
};
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-03-28 18:15:13

你不能。这样的声明应该是什么样子的,它可以返回各种类型?这是不可能的。您必须将ObjectBase*转换为正确的Object<T>*,然后使用getMember函数。只有当所有T共享一个公共基类时才有可能,所以您可以返回一个指向该基类的指针。但这将对T产生严格的约束。

票数 3
EN

Stack Overflow用户

发布于 2011-03-28 18:29:35

这是不可能做到的。编译器必须预先知道有多少不同的虚函数(和重载)可用,但在您的示例中,您正在考虑基于派生类型的新的潜在实例化按需添加新的虚成员函数。

在大多数情况下,将完全不相关的对象放在同一个容器中不是一个好的设计选项,但对于少数实际相关的情况,您可以使用不同的类型(考虑boost::any或boost:: variant,这取决于您的实际需求。这是一个捆绑的、经过测试的变体类型实现,您可以直接使用它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5457423

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档