我有一些模板类
template<typename ProgramBufferAttr>
struct CanvasDataBase{
enum class DrawType {Brush, Attr, AttrInst};
}
在那堂课里,我有enum课。现在我想使用那个枚举。有没有办法解决该枚举没有专门化模板(并且没有添加默认类型名称)。像这样:
CanvasDataBase::DrawType::Brush
我当然可以将enum从课堂上移开。但...
答案 0 :(得分:1)
假设枚举独立于模板参数,您可以创建一个定义枚举的非模板基类,并从该基类派生类模板:
struct CanvasDataDef {
enum class DrawType { Brush, Attr, AttrInst };
};
template <typename ProgramBufferAttr>
struct CanvasDataBase : CanvasDataDef {
//...
};
然后,您可以CanvasDataDef::DrawType::Brush
或CanvasDataBase<ConcreteType>::DrawType::Brush
访问枚举器。
请注意,这实际上会更改原始版本的语义。在原始情况下,CanvasDataBase<TypeA>::DrawType
和CanvasDataBase<TypeB>::DrawType
是两种不同的类型,它们不能相互分配。基类将使它们全部兼容。这可能与您想要的匹配也可能不匹配。