如何强制派生类实现一个静态函数,该函数接收派生类的对象作为参数
How to force derived class to implement a static function which receive as parameter an object of the derived class
我定义了一个类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);
}
无论如何,你的实际目标似乎是解决更高层次的问题,但你使用了错误的工具。
相关文章:
- 在派生函数中指定void*参数
- 使用 std::variant<...时调用 BaseState 函数而不是派生函数>
- 从基类数组调用派生函数
- 我设计了一个类并创建了基指针,但是当我尝试通过基指针访问派生函数时,它会出错
- c++ 在派生函数中启动 OMP 线程
- 派生函数的映射
- NIST SP 800-56A 串联/单步密钥派生函数的现有实现
- C++从基类实例调用派生函数
- c++多态性-使用基指针访问派生函数
- 派生函数中的NULL实现
- 与派生函数参数绑定
- 从基类派生函数
- 继承和使用派生函数
- 在列表对象中使用对象的派生函数
- 当派生函数定义了析构函数时,使用复制函数而不是移动函数
- 使用基类的派生函数
- 为什么调用基类函数而不是派生函数
- 多重继承派生类:如何在不重复调用 base 的情况下重用派生函数
- 试图与 Base 中的派生函数交朋友 - 为什么它不起作用?
- 在继续派生函数之前先执行基函数