我定义了一个A类,它定义了一个静态函数。我们说
class A{
// virtual functions
// the function create the object and sets its fields according to inputs
static bool create(vector<string> inputs, A* a);
}
是否可以通过以下方式强制派生类实现compute
函数?
class B : public class A{
// virtual functions
static bool create(vector<string> inputs, B* b);
}
class C : public class A{
// virtual functions
static bool create(vector<string> inputs, C* c);
}
答案 0 :(得分:1)
不,没有办法。 “强制”一个类实现一个函数只能通过纯虚函数来实现(即使那时你也没有真正强制它,因为派生类本身可能保持抽象)。
想一想。您正在尝试组合两种不兼容的C ++机制。
virtual
始终与对象有关。您有一个派生类型的对象以及指向基类型的指针或引用。虚拟函数的整个想法只对对象有意义。
static
不需要一个对象。你首先使用static
的原因正是:你想在没有对象的情况下调用某些东西。
所以这只是两个不同的世界。您问“如何让编译器在运行时选择一个函数,具体取决于对象的派生类型而没有对象?”
也许你真正想要的是模板。使用模板,您可以要求类型在特定上下文中使用时具有某种功能:
template <class T>
void f()
{
T::compute(my_vector);
}
无论如何,您的实际目标似乎是解决更高级别的问题,但您使用的是错误的工具。