繁体   English   中英

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

[英]C++ - Use enum from template class without template parameter

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之类的东西。 (我是模板的新手,如果这个问题很me脚,抱歉。)

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

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;
using MySomeClass = SomeClass<int>;

MySomeClass::SomeEnum foo = MySomeClass::SomeEnum::SOME_FLAG;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM