簡體   English   中英

調用僅在 base 中實現但未派生的 function 時如何警告(或錯誤)?

[英]How to warn (or error) when calling a function that is only implemented in base but not derived?

我真的不確定如何簡要地給這個問題命名。

情況:

  1. 在 C++20 中。
  2. 有一個Base作為接口,它指定了我們擁有的所有特性(成員函數)。 還有多個派生類可以實現功能的子集。 這些函數是虛函數。
  3. 還有一些函數在所有派生類中都是相同的。
  4. 可以有重載的成員函數。
  5. 我們可以使用 SFINAE 或概念靜態檢查某個Derived中是否存在 function。

要求:

  1. derived調用一個未實現的function時,應該會出現一些編譯警告或錯誤。
  2. 隨着特征和派生數量的增加,我希望在發生這種情況時我不需要改變(或添加)太多。
  3. 派生類也應該能夠轉換為基類 class。
  4. 不需要為2..中提到的那些“相同功能”做太多。

也許解決方案(不完美):

  1. 實現Base中的每個功能並在內部拋出錯誤。 Derived中使用using並將 function 放在私有字段中。 缺點。 如果有新功能,我們需要將其添加到每個 class。如果我們忘記這樣做,則沒有警告。

  2. Base中使用純虛函數,並在每個Derived中為每個特性實現它們。 缺點: Derived不需要的那些功能的許多實現(和代碼),並且實現都是相同的 - 拋出錯誤。

更新:

對於 11.:通過“很多實現”,我做了一個例子: https://godbolt.org/z/sW8eKjbhx

您可以將此 function 標記為純虛擬。 然后它必須在派生類中被覆蓋。 它仍然可以有身體。

class Base {
public:
    virtual void f() = 0;
};

void Base::f() {
    // ...
}

暫無
暫無

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

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