猿问

C ++标记已弃用

我想在便携式C ++中弃用一个接口中的方法。当我用谷歌搜索时,我得到的只是一个针对微软的解决方案。#pragma已弃用,__declspec(已弃用)。


二等奖解决方案是ifdef MSVC和GCC解决方案。

谢谢


宝慕林4294392
浏览 1207回答 3
3回答

汪汪一只猫

在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);该消息必须是字符串文字。

阿波罗的战车

这应该可以解决问题:#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 moreDEPRECATED(void OldFunc(int a, float b));//use me insteadvoid NewFunc(int a, double b);但是,如果函数返回类型的名称中带有逗号,则会遇到问题,例如std::pair<int, int>,这将由前处理器解释为将2个参数传递给DEPRECATED宏。在这种情况下,您将必须键入def返回类型。

哔哔one

这是我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 moreDEPRECATED void OldFunc(int a, float b);//use me insteadvoid NewFunc(int a, double b);
随时随地看视频慕课网APP
我要回答