考慮下面的例子:在課程名稱後面使用MSVCC擴展關鍵字「abstract」是一種很好的做法嗎?
class CBase abstract
{
protected:
CBase() { }
};
我能擺脫要麼受保護的構造或「抽象」關鍵字。該關鍵字使用起來很直觀,但據我所知,其他編譯器(特別是Gcc)不支持該關鍵字。
我也想知道如果使用某種宏來編寫g ++編譯的代碼很容易編寫。如果我想要在MS Windows以外的系統上編譯我的代碼,我想最小化代碼更改。
考慮下面的例子:在課程名稱後面使用MSVCC擴展關鍵字「abstract」是一種很好的做法嗎?
class CBase abstract
{
protected:
CBase() { }
};
我能擺脫要麼受保護的構造或「抽象」關鍵字。該關鍵字使用起來很直觀,但據我所知,其他編譯器(特別是Gcc)不支持該關鍵字。
我也想知道如果使用某種宏來編寫g ++編譯的代碼很容易編寫。如果我想要在MS Windows以外的系統上編譯我的代碼,我想最小化代碼更改。
什麼用空定義一個純虛析構函數,即
class CBase {
public:
virtual ~CBase() = 0;
}
inline CBase::~CBase() {}
任何未偶數體面C++編譯器支持這個和標準允許它。
宏將是微不足道的:#define abstract
。關鍵字不會添加功能。
但是也使用抽象關鍵字的純虛擬方法呢? – 2012-02-20 14:09:19
我聽說添加純虛擬析構函數會導致不必要的開銷。 – 2012-02-20 11:51:41
編譯器可能會完全優化空的定義(即根本不會調用它)。 – 2012-02-20 11:52:46
@Bartek:你測過它了嗎? – 2012-02-20 12:05:55