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 关注
- 1206 浏览
添加回答
举报