首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >模板专门化中的映射枚举

模板专门化中的映射枚举
EN

Stack Overflow用户
提问于 2013-11-22 12:51:26
回答 1查看 207关注 0票数 1

我有一个模板类,它使用全局枚举,并需要一些模式作为该类成员函数的参数。我想写一个这个类的专门化,它要求该枚举的值被“转换”。目前,我实现了一个转换函数,它基本上是一个switch语句,它将通用枚举值转换为专门化所需的值。例如,类似这样的事情:

代码语言:javascript
复制
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));
   }
}

成员函数经常被调用,这会在每次使用专门化的实例化时引入一个额外的函数调用,我认为这应该是可以避免的,因为我已经知道该模板参数的确切类型。

有没有办法避免翻译函数,从而避免额外的函数调用?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-11-22 13:11:31

经过进一步的研究,我找到了一个可能的解决方案:

如果我的成员函数获得一个整数值作为参数,而不是从模式获得一个值,并且在类专门化内部使用一个单独的枚举,其转换值的顺序与原始枚举的顺序相同,那么我可以使用:

代码语言:javascript
复制
enum specEnum {ModeASpec, ModeBSpec, ModeCSpec};
void bar ( int _mode )
{
  do_Stuff( static_cast<specEnum>(_mode));
}

Edit/Addition:

甚至不需要将参数的类型更改为int,所以

代码语言:javascript
复制
void bar ( Modes _mode )
{
  do_Stuff( static_cast<specEnum>(_mode));
}

就能做到这一点。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20145396

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档