簡體   English   中英

使用不受支持的類方法時引發編譯器錯誤

[英]Throw a compiler error when unsupported class method is used

我這里有一個實際問題。 我需要擴展數據表類。 主要類是抽象接口:

class TableInterface {
    abstract void something( some arguments ) = 0;
    abstract void something_2( some arguments ) = 0;
    // many more follow ...
      ...
    abstract int MyNewMethod() = 0;
}

這些類大約有6種實現。 我只在一個實現中需要它,這可能不會改變一會兒。 新方法在所有子類中都有意義,並且可以實現。 我現在有這個選擇:

  • 實際上為所有6個類實現該方法。 這不是技術問題,而是意味着永遠無法使用的大量工作。 該方法對所有子類都有意義 -問題不在於設計,而在於我的懶惰。
  • 留空方法主體。 真討厭

      abstract int MyNewMethod() {return -1;} 
  • 使用時拋出異常或使用assert

      abstract int MyNewMethod() {throw std::std::runtime_error("Not implemented!");} -- or -- abstract int MyNewMethod() {assert("Not implemented yet!" && false);} 

問題是,除了我的選擇之一之外,其他所有選項都可能給其他開發人員帶來問題,他們可能會在不考慮方法體未實現的情況下編譯代碼。

使用類方法時,可以讓編譯器引發錯誤嗎?

您可以嘗試以下方法:

class TableInterface 
{
public:
    ...
    virtual int MyNewMethod()
    {
#ifndef MYNEWMETHOD_ALLOWED
        static_assert(false, "MyNewMethod not implemented");
#endif
        ...
    }
    ...
};

然后,在編譯自己的代碼時,您將包括-DMYNEWMETHOD_ALLOWED定義開關。 不了解此定義的任何其他編譯自己的工作的人都會得到編譯錯誤。

暫無
暫無

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

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