chu*_*500 2 c++ typedef inner-classes
我想维护一个大量使用内部枚举的现有 API,但我需要将枚举分离成它自己的类型:
这是当前的 API:
class Outer {
public:
enum Inner {
FIELD1
};
};
Run Code Online (Sandbox Code Playgroud)
换句话说,用户目前希望使用 来设置Inners Outer::Inner。如果可能,我想在创建新的外部类型时保留名称:
enum Inner {
FIELD1
};
class Outer {
public:
typedef Inner Inner;
}
Run Code Online (Sandbox Code Playgroud)
但是 - 它给了我一个编译器错误:
./Playground/file0.cpp:23:19: error: declaration of 'typedef enum Inner Outer::Inner' changes meaning of 'Inner' [-fpermissive]
23 | typedef Inner Inner;
| ^~~~~
./Playground/file0.cpp:17:6: note: 'Inner' declared here as 'enum Inner'
17 | enum Inner {
| ^~~~~
Run Code Online (Sandbox Code Playgroud)
如果我只是更改枚举的名称,则一切正常。
#include <cassert>
enum Enum {
FIELD1
};
class Outer {
public:
typedef Enum Inner;
};
int main() {
Enum field = Enum::FIELD1;
Outer::Inner field_alt = Outer::Inner::FIELD1;
assert(field == field_alt);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
您的typedefforInner需要引用外部作用域中的Inner枚举,因此它应该如下所示:
typedef ::Inner Inner;
Run Code Online (Sandbox Code Playgroud)
using不过,我通常更喜欢语句,它看起来像这样:
using Inner = ::Inner;
Run Code Online (Sandbox Code Playgroud)
这是一个演示