[英]Why does compiler throw an error when we declare an extra template argument and not used in definition?
[英]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種實現。 我只在一個實現中需要它,這可能不會改變一會兒。 新方法在所有子類中都有意義,並且可以實現。 我現在有這個選擇:
留空方法主體。 真討厭
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.