moa*_*ala 22 c++ enums deprecated
是否可以将枚举值标记为已弃用?
例如
enum MyEnum {
firstvalue = 0
secondvalue,
thirdvalue, // deprecated
fourthvalue
};
Run Code Online (Sandbox Code Playgroud)
二等奖解决方案是ifdef MSVC和GCC解决方案.
Tom*_*Tom 14
你可以这样做:
enum MyEnum {
firstvalue = 0,
secondvalue,
thirdvalue, // deprecated
fourthvalue
};
#pragma deprecated(thirdvalue)
Run Code Online (Sandbox Code Playgroud)
然后,当使用变量时,编译器将输出以下内容:
warning C4995: 'thirdvalue': name was marked as #pragma deprecated
Run Code Online (Sandbox Code Playgroud)
编辑
这看起来有点hacky,我没有GCC编译器来确认(有人可以帮我吗?)但它应该工作:
enum MyEnum {
firstvalue = 0,
secondvalue,
#ifdef _MSC_VER
thirdvalue,
#endif
fourthvalue = secondvalue + 2
};
#ifdef __GNUC__
__attribute__ ((deprecated)) const MyEnum thirdvalue = MyEnum(secondvalue + 1);
#elif defined _MSC_VER
#pragma deprecated(thirdvalue)
#endif
Run Code Online (Sandbox Code Playgroud)
这是我的答案和MSalters答案的结合
从 C++14 开始,您可以使用 [[deprecated]] 属性。
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3760.html
从GCC 6开始,您可以简单地弃用枚举:
enum {
newval,
oldval __attribute__ ((deprecated ("too old")))
};
Run Code Online (Sandbox Code Playgroud)
资料来源:https://gcc.gnu.org/gcc-6/changes.html
| 归档时间: |
|
| 查看次数: |
4699 次 |
| 最近记录: |