在模板专门化中映射枚举
Mapping Enums in template specializations
我有一个模板化的类,它使用全局枚举和一些模式作为该类成员函数的参数。我想写一个该类的特殊化,它要求该枚举的值被"翻译"。目前,我实现了一个转换函数,它基本上是一个switch语句,它将通用枚举值转换为专业化所需的值。例如:
enum Modes { ModeA, ModeB, ModeC };
template<typename Foo>
class tClass
{
void bar ( Modes _mode )
{
do_stuff(_mode);
}
}
template<>
class tClass<specializedFoo>
{
void bar ( Modes _mode )
{
do_Stuff(convertMode(_mode));
}
}
memberfunctions被频繁调用,这会在每次使用特殊化声明时引入额外的函数调用,在我看来,这是可以避免的,因为我已经知道该模板参数的确切类型。
有没有什么方法可以避免翻译函数,从而避免额外的函数调用?
经过更多的研究,我找到了一个可能的解决方案:
如果我的成员函数获得一个整数值作为参数,而不是来自Modes的值,并且在类专用化内部,我使用一个单独的枚举,其中的转换值与原始枚举中的顺序相同,我可以使用:
enum specEnum {ModeASpec, ModeBSpec, ModeCSpec};
void bar ( int _mode )
{
do_Stuff( static_cast<specEnum>(_mode));
}
编辑/添加:
甚至不需要将参数的类型更改为int,因此
void bar ( Modes _mode )
{
do_Stuff( static_cast<specEnum>(_mode));
}
真的很管用。
相关文章:
- 如何在没有映射的情况下在枚举和字符串之间进行转换?
- std::映射键作为模板化结构与枚举成员
- 如何使用枚举将字符值映射到 int
- 编译结构的时枚举映射
- 有效的双向作用域枚举映射
- 映射枚举值为C 中的模板参数
- 使用 C++11 可变参数模板初始化枚举到字符串映射
- 将枚举值映射到 C++ 中的类型
- 将C++枚举映射为常量字符*
- 在类中映射命名空间枚举
- 将一个枚举映射到另一个枚举
- 定义基于模板的映射指针,以便在验证范围时将 int 解析为枚举
- 在C++中如何将运行时类型鉴别器映射到模板实例(无需手动枚举所有实例)
- 枚举映射对重构具有鲁棒性
- 在模板专门化中映射枚举
- 使用C++中的函数指针映射枚举键和值
- 映射/联接两个自动生成的枚举的最佳方式
- 将存储在多映射中的私有枚举作为值读取
- 我如何消除这个枚举到字符串映射代码的样板文件?
- 无法访问常量静态标准::映射枚举结构