c ++从虚函数调用静态函数
c++ calling static function from virtual function
我有调用适当静态方法的虚方法class:
class A{
public:
static void bar() {std::cout<<"bar A\n";}
virtual void foo(){
//Some A work...
bar();
}
};
class B : public A{
public:
static void bar() {std::cout<<"bar B\n";}
virtual void foo() override {
//Some B work...
bar(); //prints bar B, as intended.
}
};
但现在我想要 class C,使用方法 foo(),最后调用 C::bar() 的唯一区别:
class C : public A {
public:
static void bar() override {std::cout<<"bar C\n";}
virtual void foo(){
//Some **A** work...
bar(); //I want to print "bar C" here
}
}
但是,这里我需要完整复制方法 A::foo 定义。我还可以引入虚拟虚拟方法,如 `virtual void callStaticBar(){bar();} 并在 class C 中使用相同的文本覆盖它。有没有更优雅的方式来做这样的事情?
没有。如果未定义 C::foo()
,在 C
实例上调用 foo()
将真正调用 A::foo()
;因为 class A
不知道 class C
(除了 vtable 的那些情况),所以 A::foo()
没有办法调用 C::bar()
,不管原始调用来自 C
个实例。
您需要使用虚拟虚方法或告诉我们更多您想要实现的目标,因为在特定情况下它们可能是更好的解决方案。
我有调用适当静态方法的虚方法class:
class A{
public:
static void bar() {std::cout<<"bar A\n";}
virtual void foo(){
//Some A work...
bar();
}
};
class B : public A{
public:
static void bar() {std::cout<<"bar B\n";}
virtual void foo() override {
//Some B work...
bar(); //prints bar B, as intended.
}
};
但现在我想要 class C,使用方法 foo(),最后调用 C::bar() 的唯一区别:
class C : public A {
public:
static void bar() override {std::cout<<"bar C\n";}
virtual void foo(){
//Some **A** work...
bar(); //I want to print "bar C" here
}
}
但是,这里我需要完整复制方法 A::foo 定义。我还可以引入虚拟虚拟方法,如 `virtual void callStaticBar(){bar();} 并在 class C 中使用相同的文本覆盖它。有没有更优雅的方式来做这样的事情?
没有。如果未定义 C::foo()
,在 C
实例上调用 foo()
将真正调用 A::foo()
;因为 class A
不知道 class C
(除了 vtable 的那些情况),所以 A::foo()
没有办法调用 C::bar()
,不管原始调用来自 C
个实例。
您需要使用虚拟虚方法或告诉我们更多您想要实现的目标,因为在特定情况下它们可能是更好的解决方案。