簡體   English   中英

多個 inheritance 模板的成員函數歧義

[英]Member functions ambiguity with multiple inheritance templates

我公開將 class 模板“區域”的兩個實例,一個 int 和另一個 char 派生到一個單獨的 class“矩形”中。

template<class T>
class Area {
  public:
    T a;
    T getArea() { return a; }
    void setArea(T t) { a = t; }
};  

class Rectangle : public Area<int>, public Area<char> {
};  

int main() {
  Rectangle a;
  a.setArea(1);
  std::cout << a.getArea() << std::endl;
  Rectangle b;
  b.setArea('c');
  std::cout << b.getArea() << std::endl;
}   

我看到 setArea 和 getArea 有歧義。 為什么呢? 我想在 public Area 之后, public Area 會有兩個 setArea 的定義。 首先,void setArea(int) 和另一個 void setArea(char)。 如果我錯了,請糾正我。 如果我是正確的,為什么會模棱兩可?

如果using語句將兩個基類中的名稱setArea帶入派生的 class:

class Rectangle : public Area<int>, public Area<char> {
  using Area<int>::setArea;
  using Area<char>::setArea;
};  

編譯器將能夠調用正確的setArea

這對getArea不起作用,因為這兩個函數僅在返回類型上有所不同。 您必須在呼叫站點區分它們:

std::cout << a.Area<int>::getArea() << std::endl;

暫無
暫無

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

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