C ++-使用没有模板参数的模板类中的枚举

Ady*_*Ady 4 c++ templates

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脚,抱歉。)

sky*_*ack 8

如果出于某种原因(我不能说真正的问题)要将枚举括在类定义中,您仍然可以引入一个不是类模板并且包含枚举的类,然后使用您的类模板继承该类。就这样。
举个例子:

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)