C 从虚拟函数调用静态函数
c++ calling static function from virtual function
我有虚拟方法,可以调用适当类的静态方法:
class A{
public:
static void bar() {std::cout<<"bar An";}
virtual void foo(){
//Some A work...
bar();
}
};
class B : public A{
public:
static void bar() {std::cout<<"bar Bn";}
virtual void foo() override {
//Some B work...
bar(); //prints bar B, as intended.
}
};
,但是现在我想使用class c,使用method foo(),唯一的调用c :: bar()的差异:
class C : public A {
public:
static void bar() override {std::cout<<"bar Cn";}
virtual void foo(){
//Some **A** work...
bar(); //I want to print "bar C" here
}
}
但是,在这里我需要完整副本A :: foo定义。我还可以介绍虚拟方法,例如`virtual void callstaticbar(){bar();},并用相同的文本将其覆盖。是否有更多优雅的方法来做这种事情?
no。如果未定义C::foo()
,则在C
实例上调用foo()
将真正调用A::foo()
;由于A
类不知道C
类(除了那些带有VTable的案例),因此A::foo()
无法调用C::bar()
,而不管原始呼叫来自C
实例。
您需要使用虚拟方法的方法或告诉我们更多有关您要实现的目标的信息,因为它们可能是在特定情况下的更好解决方案。
相关文章:
- 在 nullptr 上调用无状态类的非静态成员函数是否合法?
- 处理类内的回调时,必须调用对非静态成员函数的引用
- 调用模板提供的(静态)函数
- 为什么我不能像这样在静态成员函数中调用静态成员变量?
- 从另一个动态链接库项目调用静态库函数
- 静态对象如何调用私有构造函数
- 简化静态成员函数调用的方法
- C++类静态成员函数调用错误
- 通过指针调用静态成员函数
- 错误:必须调用对非静态成员函数的引用 (2)
- 为什么 C++ 中的函数重载解析会考虑静态调用的非静态成员函数
- C :在没有对象实例的情况下调用非静态成员函数
- 必须调用对非静态成员函数的引用(向量)
- 未定义的对通过静态库中调用的同一文件中定义的函数的引用
- 必须调用函子 ->对非静态成员函数的引用
- 在不存在的对象上调用静态成员函数
- 如何从静态成员函数调用非静态成员函数
- StringComp:必须调用对非静态成员函数的引用
- 在没有对象参数编译器错误的情况下调用非静态成员函数
- C++ 错误 LNK1120:在静态函数内部调用时有 1 个未解析的外部