2012-08-07 50 views
1

我在這裏絕對堅果。我在做一些C++開發Windows和我有一個名爲「界面」命名空間:如何禁用win32'interface'宏?

namespace gd { 
namespace interface { 

}} // end namespace 

然而,有一個名爲「OBJBASE.H」文件,該文件被列入不管我有「WINDOWS.H 「或」Wtypes.h「,其中包含一個名爲」interface「的宏。這個宏不允許我使用名稱空間名稱。 Win32 API中是否有禁用界面宏定義的功能?如果沒有,有人可以想出一個聰明的解決方法來禁用它,而不需要在我的代碼庫中進行太多的批量更改?

+3

'#undef interface'? – delnan 2012-08-07 21:24:55

+0

@delnan我想過一個包裝器,它對我來說是這樣的,但如果我的代碼之外的某個人(它是一個庫)直接使用windows.h,它們將會遇到同樣的問題。在API級別使用某些預處理器定義來禁用它會容易得多 – 2012-08-07 21:26:04

回答

9

如果您確實想要這樣做,您可以使用#undefinterface宏。

我會建議,而不是命名您的名字空間interface,因爲interface是一樣接近作爲一個保留字,因爲你可以得到沒有實際上是一個保留字。這會導致很大的混淆,使這個命名空間被使用。

+0

謝謝,我已將名稱空間重命名。 – 2012-08-07 22:07:38

0

看來您也可以定義WIN32_LEAN_AND_MEAN以避免objbase.h在包含windows.h時被拉入。