我的接口中有一个方法,我想用可移植的C++将其弃用。当我在谷歌上搜索这个的时候,我得到的只是一个微软特有的解决方案:#pragma deprecated
和__declspec(deprecated)
。
二等奖的解决方案是ifdef
一个MSVC和一个GCC解决方案。
发布于 2008-11-17 10:09:41
这应该能起到作用:
#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个参数传递给已弃用的宏。在这种情况下,您必须对返回类型进行类型定义。
编辑:更简单(但可能不太兼容)版本的here。
发布于 2008-11-17 09:11:43
在GCC中,您可以使用已弃用的属性声明函数,如下所示:
void myfunc() __attribute__ ((deprecated));
当在.c文件中使用该函数时,这将触发编译时警告。
你可以在http://gcc.gnu.org/onlinedocs/gcc/Pragmas.html的“诊断指南”中找到更多信息。
发布于 2008-11-17 09:14:04
在处理可移植项目时,在某些情况下,您几乎不可避免地需要为一系列平台提供一段预处理的替代方案。#ifdef this #ifdef那个等等。
在这样的部分中,您可以很好地有条件地定义一种弃用符号的方法。我的偏好通常是定义一个“警告”宏,因为大多数工具链都支持自定义编译器警告。然后,您可以继续使用一个特定的警告宏,用于弃用等。对于支持专用弃用方法的平台,您可以使用该宏来代替警告。
https://stackoverflow.com/questions/295120
复制相似问题