如何强制派生类实现一个静态函数,该函数接收派生类的对象作为参数

时间:2014-04-09 16:48:01

标签: c++

我定义了一个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);
}

1 个答案:

答案 0 :(得分:1)

不,没有办法。 “强制”一个类实现一个函数只能通过纯虚函数来实现(即使那时你也没有真正强制它,因为派生类本身可能保持抽象)。

想一想。您正在尝试组合两种不兼容的C ++机制。

virtual始终与对象有关。您有一个派生类型的对象以及指向基类型的指针或引用。虚拟函数的整个想法只对对象有意义。

相反,

static 需要一个对象。你首先使用static的原因正是:你想在没有对象的情况下调用某些东西。

所以这只是两个不同的世界。您问“如何让编译器在运行时选择一个函数,具体取决于对象的派生类型而没有对象?”

也许你真正想要的是模板。使用模板,您可以要求类型在特定上下文中使用时具有某种功能:

template <class T>
void f()
{
    T::compute(my_vector);
}

无论如何,您的实际目标似乎是解决更高级别的问题,但您使用的是错误的工具。