c++ - 自动协变类推导

标签 c++ templates inheritance c++11

有这样一个类的最巧妙的方法是什么,

class Object
{
public:
    virtual Object* Find(string name);
};

实现后其派生类的 Find() 方法自动返回派生类类型,而无需执行如下操作:

class DerivedObject : public Object
{
public:
    DerivedObject* Find(string name);
};

手动?

额外:实际上在我的实际实现中它是一堆static 函数,而不是virtual 函数。我有像 static Object* Object::Find(string name)static GameObject* GameObject::Find(string name) 这样的函数。

最佳答案

去掉virtual 函数,代之以写一个自由函数。

template<typename T>
T* Find(T& object, string name) {
}

你必须通过 Find(derivedobject,name) 而不是 derivedobject.Find(name) 来调用它,否则我认为这会如你所愿.

如果您需要它访问protected 数据,您还必须在Object 中将其声明为friend。只需将以下行放在 Object 类中即可。

template<typename T>
friend
T* Find(T& object, string);

关于c++ - 自动协变类推导,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19670973/

相关文章:

javascript - 如何将图像位置放入 django 模板中的 javascript 代码中

c++ - 如何使用 vector 作为基类

c++ - 将 vector 传递给c++中的线程函数

android - gradle experimental 通过 srcDir srcFile 指令包含文件目录

C++ Weird Diamond继承问题

java - Java 如何知道在此示例中使用哪个类?

class - 如何覆盖类中字段的默认值?

用于包装任意函数的 C++ 模板类

c++ - 模板和类型转换运算符(operator)

c++ - 在模板 C++ 类中初始化 const 的 const 数组