c++ - 模板方法覆盖非模板方法

标签 c++ templates overriding base-class

我想将任何一种对象(Object、Object等)放入一个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 施加严格限制。 .

关于c++ - 模板方法覆盖非模板方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5457423/

相关文章:

Java:如何覆盖这个泛型方法?

c++ - 此示例是否导致未定义的行为?

c++如何使用select查看套接字是否已关闭

c++ - OpenGL - 阴影贴图/深度贴图给出奇怪的结果

html - 网页 CSS 在某些页面上突然显示错误

c++ - 从有符号到无符号问题的类型转换

javascript - 覆盖 ExtJS 5.1.1 中的现有映射

c++ - 为什么我需要一个前向迭代器来实现我定制的 std::search

python - Django:渲染时出现 NoReverseMatch 错误

language-agnostic - 子类导致父类(super class)中的意外行为——OO 设计问题