3 回答

TA貢獻1898條經驗 獲得超8個贊
在C ++ 14中,您可以使用[[deprecated]]屬性將功能標記為已棄用(請參見7.6.5 [dcl.attr.deprecated])。
該屬性令牌 deprecated可以用來標記的名稱和它的使用仍然是允許的實體,但不鼓勵出于某種原因。
例如,foo不贊成使用以下功能:
[[deprecated]]
void foo(int);
可以提供一條消息,描述不贊成使用名稱或實體的原因:
[[deprecated("Replaced by bar, which has an improved interface")]]
void foo(int);
該消息必須是字符串文字。

TA貢獻1862條經驗 獲得超6個贊
這應該可以解決問題:
#ifdef __GNUC__
#define DEPRECATED(func) func __attribute__ ((deprecated))
#elif defined(_MSC_VER)
#define DEPRECATED(func) __declspec(deprecated) func
#else
#pragma message("WARNING: You need to implement DEPRECATED for this compiler")
#define DEPRECATED(func) func
#endif
...
//don't use me any more
DEPRECATED(void OldFunc(int a, float b));
//use me instead
void NewFunc(int a, double b);
但是,如果函數返回類型的名稱中帶有逗號,則會遇到問題,例如std::pair<int, int>,這將由前處理器解釋為將2個參數傳遞給DEPRECATED宏。在這種情況下,您將必須鍵入def返回類型。

TA貢獻1854條經驗 獲得超8個贊
這是我2008年答案的簡化版本:
#if defined(__GNUC__) || defined(__clang__)
#define DEPRECATED __attribute__((deprecated))
#elif defined(_MSC_VER)
#define DEPRECATED __declspec(deprecated)
#else
#pragma message("WARNING: You need to implement DEPRECATED for this compiler")
#define DEPRECATED
#endif
//...
//don't use me any more
DEPRECATED void OldFunc(int a, float b);
//use me instead
void NewFunc(int a, double b);
- 3 回答
- 0 關注
- 1309 瀏覽
添加回答
舉報