为了账号安全,请及时绑定邮箱和手机立即绑定

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 关注
  • 1206 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信