我有一个模板化的类,它使用一个全局枚举,我需要一些模式作为该类的成员函数的参数。我想写一个该类的特化,它要求枚举的值被“翻译”。目前我实现了一个转换函数,它基本上是一个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));
}
}
经常调用成员函数,每次使用特化的实例时都会引入一个额外的函数调用,在我看来应该是可以避免的,因为我已经知道该模板参数的确切类型。
有没有办法避免翻译功能,从而避免额外的函数调用?
答案 0 :(得分:1)
经过一番研究后,我发现了一个可能的解决方案:
如果我的成员函数获取一个整数值作为参数而不是模式中的值,并且在类专门化中我使用单独的枚举,其翻译的值与原始枚举中的顺序相同,我可以使用:
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));
}
诀窍。