我有一个模板类,它使用全局枚举,并需要一些模式作为该类成员函数的参数。我想写一个这个类的专门化,它要求该枚举的值被“转换”。目前,我实现了一个转换函数,它基本上是一个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));
}
}成员函数经常被调用,这会在每次使用专门化的实例化时引入一个额外的函数调用,我认为这应该是可以避免的,因为我已经知道该模板参数的确切类型。
有没有办法避免翻译函数,从而避免额外的函数调用?
发布于 2013-11-22 13:11:31
经过进一步的研究,我找到了一个可能的解决方案:
如果我的成员函数获得一个整数值作为参数,而不是从模式获得一个值,并且在类专门化内部使用一个单独的枚举,其转换值的顺序与原始枚举的顺序相同,那么我可以使用:
enum specEnum {ModeASpec, ModeBSpec, ModeCSpec};
void bar ( int _mode )
{
do_Stuff( static_cast<specEnum>(_mode));
}Edit/Addition:
甚至不需要将参数的类型更改为int,所以
void bar ( Modes _mode )
{
do_Stuff( static_cast<specEnum>(_mode));
}就能做到这一点。
https://stackoverflow.com/questions/20145396
复制相似问题