亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

C ++標記已棄用

C ++標記已棄用

C++
寶慕林4294392 2019-10-06 12:54:23
我想在便攜式C ++中棄用一個接口中的方法。當我用谷歌搜索時,我得到的只是一個針對微軟的解決方案。#pragma已棄用,__declspec(已棄用)。二等獎解決方案是ifdef MSVC和GCC解決方案。謝謝
查看完整描述

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);

該消息必須是字符串文字。



查看完整回答
反對 回復 2019-10-06
?
阿波羅的戰車

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返回類型。


查看完整回答
反對 回復 2019-10-06
?
嗶嗶one

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);


查看完整回答
反對 回復 2019-10-06
  • 3 回答
  • 0 關注
  • 1309 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號