我发现有一个类很方便,它基本上像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最有用的功能)
发布于 2014-09-02 17:23:40
你还不能。你想要的是Implicit Template Parameters。委员会喜欢这个想法,但希望看到提议的符号与dyp提到的auto符号的比较。我答应为11月的标准会议起草一份新的草案。我可以包括你的例子吗?
https://stackoverflow.com/questions/25627805
复制相似问题