2011-02-14 66 views
7

我有幾個我想棄用的TypeDefs。我這樣做是爲了保持與已經存在的代碼的向後兼容性。有沒有一個優雅的(或者可能不是那麼優雅)解決方案?我希望它能獨立於平臺,但如果只有Visual Studio解決方案,那也是可以的。不贊成Typedef

+4

沒有便攜式解決方案。 @納瓦茲給了微軟的擴展。相當於gcc的類型是`typedef int myint __attribute __((不建議使用));`。 – aschepler 2011-02-14 18:40:29

回答

11

在MSVC++,你可以棄用typedef這樣的:

typedef __declspec(deprecated) int myint; 

的MSVC++編譯器將生成警告myint已過時!

如果你想編譯器生成一個特定的消息編譯過時的typedef時,那麼這樣做:

typedef __declspec(deprecated("myint is deprecated, so most likely in the next version this myint will be missing")) int myint; 
+0

做什麼?我想你錯過了最後一部分:)) – lurscher 2011-02-14 18:39:34

+1

您可能需要關閉最後一個括號。 OT:http://xkcd.com/859/ – KitsuneYMG 2011-02-14 18:41:11

4

如果一次性易典都允許,你可以只移動的typedef爲deprecated命名空間需要在使用typedef的地方使用using namespace deprecated

如果這不是一個選項,它可能有可能炮製的是,在實例化時,會產生一個警告的模板,但我不知道如何產生副手這樣的警告:

template <class T> 
class TypedefHolder; 

template <> 
class TypedefHolder<int> 
{ 
    typedef int WhateverType; 
    // Something that induces a compile warning. 
}; 

所以不是:

typedef int WhateverType; 

就變成:

typedef TypedefHolder<int>::WhateverType WhateverType;