簡體   English   中英

c ++從虛函數調用靜態函數

[英]c++ calling static function from virtual function

我有調用適當類的靜態方法的虛方法:

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.
   }
};

但是現在我想擁有類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();},並在類C中用相同的文本覆蓋它。 是否有更優雅的方式來做這樣的事情?

不。如果沒有定義C::foo() ,在C實例上調用foo()將真正調用A::foo() ; 因為A類不知道C類(除了那些帶有vtable的情況), A::foo()無法調用C::bar() ,無論原始調用來自a C實例。

您需要使用虛擬虛擬方法的方法或告訴我們更多關於您想要實現的內容,因為它們在特定情況下可能是更好的解決方案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM