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
这不会编译,因为
类SomeClass在没有模板参数的情况下使用
如果没有模板参数,没有办法/解决方法使用它,有点为该类创建枚举全局,因此它不依赖于参数。
并不是我不能输入它们但是它们可能很长而且很复杂,代码将难以阅读而且我不能在这里使用像auto这样的东西。 (我是模板的新手,如果这个问题很蹩脚,那就很抱歉。)
答案 0 :(得分:5)
如果你想将你的枚举包含在原因的类定义中(我不能说出真正的问题是什么),你仍然可以再引入一个不是
举个例子:
struct SomeBase {
enum SomeEnum { SOME_FLAG };
};
template<typename>
struct SomeClass: SomeBase {
// ...
};
使用此:
SomeBase::SomeEnum::SOME_FLAG;
而不是:
SomeClass::SomeEnum::SOME_FLAG;
每当您想直接访问枚举时。
无论如何,以下内容仍然有效:
SomeClass<void>::SomeEnum foo = SomeClass<void>::SomeEnum::SOME_FLAG;
答案 1 :(得分:0)
using MySomeClass = SomeClass<int>;
MySomeClass::SomeEnum foo = MySomeClass::SomeEnum::SOME_FLAG;