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

How to force derived class to implement a static function which receive as parameter an object of the derived class

本文关键字:派生 函数 参数 对象 静态函数 实现 何强制 一个      更新时间:2023-10-16

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

不,没有办法。"强制"一个类实现一个函数只能用纯虚拟函数来实现(即使这样,你也不会真正强制它,因为派生类本身可能保持抽象)。

想想看,你正试图将C++的两种不兼容的机制结合起来。

virtual总是与对象有关。您有一个派生类型的对象和一个指向基类型的指针或引用。虚拟函数的整个概念只对对象有意义。

相反,static不需要对象。首先使用static的原因正是:您想在没有对象的情况下调用某个对象。

所以这只是两个不同的世界,真的。您在问"在没有对象的情况下,如何让编译器在运行时根据对象的派生类型选择函数?"

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

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

无论如何,你的实际目标似乎是解决更高层次的问题,但你使用了错误的工具。