拥有这样一个类的最佳方法是什么,
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)
等函数。
答案 0 :(得分:2)
取消virtual
函数,改写免费函数。
template<typename T>
T* Find(T& object, string name) {
}
您必须通过Find(derivedobject,name)
而不是derivedobject.Find(name)
来调用它,否则我认为这会按照您的喜好进行。
如果您需要访问friend
数据,则还必须在Object
内将其声明为protected
。只需将以下行放在Object
类中。
template<typename T>
friend
T* Find(T& object, string);