template<typename T> class SomeClass{
public:
enum SomeEnum{ SOME_FLAG};
};
SomeClass::SomeEnum some_enum = SomeClass::SomeEnum::SOME_FLAG; //NO
SomeClass<int>::SomeEnum some_enum = SomeClass::SomeEnum::SOME_FLAG; //NO
SomeClass<int>::SomeEnum some_enum = SomeClass<int>::SomeEnum::SOME_FLAG; //YES
Run Code Online (Sandbox Code Playgroud)
这不会编译,因为
类SomeClass,不带模板参数
没有模版参数,没有办法/解决方法使用它,有点使该类的枚举成为全局类,因此它不依赖于该参数。
不是我不能输入它们,而是它们可能又长又复杂,代码将更难阅读,在这里我不能使用诸如auto之类的东西。(我是模板的新手,如果这个问题很me脚,抱歉。)
如果出于某种原因(我不能说真正的问题)要将枚举括在类定义中,您仍然可以引入一个不是类模板并且包含枚举的类,然后使用您的类模板继承该类。就这样。
举个例子:
struct SomeBase {
enum SomeEnum { SOME_FLAG };
};
template<typename>
struct SomeClass: SomeBase {
// ...
};
Run Code Online (Sandbox Code Playgroud)
用这个:
SomeBase::SomeEnum::SOME_FLAG;
Run Code Online (Sandbox Code Playgroud)
代替这个:
SomeClass::SomeEnum::SOME_FLAG;
Run Code Online (Sandbox Code Playgroud)
每当您想直接访问枚举时。
无论如何,以下内容仍然有效:
SomeClass<void>::SomeEnum foo = SomeClass<void>::SomeEnum::SOME_FLAG;
Run Code Online (Sandbox Code Playgroud)