1

像这样上课的最整洁的方法是什么,

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)

4

1 回答 1

2

去掉这个virtual函数,改写一个自由函数。

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

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

如果您需要它来访问数据,您还必须将其声明为friend内部。只需将以下行放入类中。ObjectprotectedObject

template<typename T>
friend
T* Find(T& object, string);
于 2013-10-30T00:39:16.580 回答