Templates 枚举类和模板
我有一些模板类Templates 枚举类和模板,templates,c++11,enums,Templates,C++11,Enums,我有一些模板类 template<typename ProgramBufferAttr> struct CanvasDataBase{ enum class DrawType {Brush, Attr, AttrInst}; } 我当然可以把enum移出课堂。但是…假设枚举独立于模板参数,则可以创建定义枚举的非模板基类,并从该基类派生类模板: struct CanvasDataDef { enum class DrawType { Brush, Attr, AttrIns
template<typename ProgramBufferAttr>
struct CanvasDataBase{
enum class DrawType {Brush, Attr, AttrInst};
}
我当然可以把enum移出课堂。但是…假设枚举独立于模板参数,则可以创建定义枚举的非模板基类,并从该基类派生类模板:
struct CanvasDataDef {
enum class DrawType { Brush, Attr, AttrInst };
};
template <typename ProgramBufferAttr>
struct CanvasDataBase : CanvasDataDef {
//...
};
struct CanvasDataDef{
枚举类DrawType{Brush,Attr,AttrInst};
};
模板
结构CanvasDataBase:CanvasDataDef{
//...
};
然后,您可以作为CanvasDataDef::DrawType::Brush
或CanvasDataBase::DrawType::Brush
访问枚举数
注意,这实际上会改变原始版本的语义。在原始情况下,
CanvasDataBase::DrawType
和CanvasDataBase::DrawType
是两种不同的类型,不能相互分配。基类将使它们都兼容。这可能是或可能不匹配您想要的。< /P>不是您有结构,不是类,所以文本有点不一致。@ C++中的LaszloPapp,使用关键字<代码>类< /C>(默认访问控制是私有的)或关键字<代码>结构> <代码>(默认访问控制为公共)。但在这两种情况下,它都是C++术语中的一个类。@ LASZLopApp按照标准,struct CanvasDataDef {
enum class DrawType { Brush, Attr, AttrInst };
};
template <typename ProgramBufferAttr>
struct CanvasDataBase : CanvasDataDef {
//...
};