枚举类和模板

时间:2013-12-23 09:59:58

标签: templates c++11 enums

我有一些模板类

template<typename ProgramBufferAttr>
struct CanvasDataBase{
   enum class DrawType {Brush, Attr, AttrInst};
}

在那堂课里,我有enum课。现在我想使用那个枚举。有没有办法解决该枚举没有专门化模板(并且没有添加默认类型名称)。像这样:

CanvasDataBase::DrawType::Brush

我当然可以将enum从课堂上移开。但...

1 个答案:

答案 0 :(得分:1)

假设枚举独立于模板参数,您可以创建一个定义枚举的非模板基类,并从该基类派生类模板:

struct CanvasDataDef {
  enum class DrawType { Brush, Attr, AttrInst };
};

template <typename ProgramBufferAttr>
struct CanvasDataBase : CanvasDataDef {
  //...
};

然后,您可以CanvasDataDef::DrawType::BrushCanvasDataBase<ConcreteType>::DrawType::Brush访问枚举器。

请注意,这实际上会更改原始版本的语义。在原始情况下,CanvasDataBase<TypeA>::DrawTypeCanvasDataBase<TypeB>::DrawType是两种不同的类型,它们不能相互分配。基类将使它们全部兼容。这可能与您想要的匹配也可能不匹配。