首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >重载std::获取枚举索引数组

重载std::获取枚举索引数组
EN

Stack Overflow用户
提问于 2014-09-02 16:09:09
回答 1查看 464关注 0票数 4

我发现有一个类很方便,它基本上像std::array,但是被某些枚举的值索引。我想不难想象如何实现它,假设它有这样的签名:

类enum_array

另一方面,在尝试实现所有与std::array相关的标准函数时,我注意到为此类模板编写重载的std::get函数并不容易。

首先,我认为这个std::get具有上述枚举作为模板参数的值是很自然的,因此出现了大多数问题:

1)如果我想在类之外定义该函数,我必须执行如下操作:

名称空间std { template EnumT &get (enum_array &val)

但是,当指定第一个模板参数时,这个问题会引发EnumT仍然未知,因此这个模板实际上是不正确的。

如果我将EnumT Index放在第二个或更远的参数列表中,那么存在的问题是,我不能真正指定这个参数,并且必须同时指定其他一些内容,这看起来不像对std::array的正常std::get调用。

2)如果我在get类中将enum_array函数定义为朋友函数,那么除了将它放置在类enum_array所属的同一个名称空间之外,一切看起来都很好。把它放到namespace std中并不是最好的设计。

因此,我的问题是:带有枚举参数的std::get是否可以像我提到的那样使用C++模板机制重载此类类呢?

(我想指出,这个问题引起的大部分原因都是出于好奇,毕竟在我看来,std::get并不是std::array最有用的功能)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-02 17:23:40

你还不能。你想要的是Implicit Template Parameters。委员会喜欢这个想法,但希望看到提议的符号与dyp提到的auto符号的比较。我答应为11月的标准会议起草一份新的草案。我可以包括你的例子吗?

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

https://stackoverflow.com/questions/25627805

复制
相关文章

相似问题

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