有这样一个类的最巧妙的方法是什么,
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/