2017-08-07 40 views
0

可以寫一個using聲明給例如推廣私有基類方法在派生類中公開,例如B::foo。是否有可能做一些類似的工作,使方法可用而無需編寫另一種方法是否有可能爲成員的方法編寫使用聲明,類似於無用方法?

#include <iostream> 

class A 
{ 
    int m_number{ 99 }; 
protected: 
    int foo() { return m_number; } 
}; 

class B : public A 
{ 
public: 
    using A::foo; 
}; 

class C 
{ 
    B m_a; 
public: 
    using foo() = m_a.foo(); // is something like this possible? 
}; 


int main() { 
    B b; 
    std::cout<<b.foo(); 

    C c; 
    std::cout<<c.foo(); 
} 
+0

不,這是不可能的。現在,你爲什麼不問你的問題,而不是你認爲*的解決方案。 – StoryTeller

+0

@StoryTeller我需要解決的具體問題涉及上述主題。這只是一種使事情更加緊湊的方法。就這樣。 – dani

+0

然後詢問*那*。誰知道可能存在的解決方案你還沒有感覺到。這將比這個死衚衕的問題更有成效。 – StoryTeller

回答

4

這是不可能的。爲了理解爲什麼,您需要明白,聲明的目的是通過使名稱出現在最初聲明的位置以外的其他位置來影響名稱查找算法。

B的聲明,上面寫着:

using A::foo; 

具有在B範圍造成的查找的名稱foo找到成員A::foo的效果。它不會創建一個新的foo方法,該方法將B*作爲this指針並將呼叫轉發到A::foo;它只是導致功能A::foo出現在別處(即在B)。

A using聲明不能導致生成任何新代碼,例如通過調用成員方法轉發呼叫所需的代碼。如果你想要一個新的方法,你只需要自己寫。

相關問題