重载std :: get for enum索引数组

Pre*_*nik 4 c++ arrays enums templates c++11

我发现有一个类基本上就像std::array是一些枚举的类,但是很方便.我想这不是很难想象如何实现它,让我们说它有这样的签名:

class enum_array <typename EnumT, typename ValueT, size_t N>
Run Code Online (Sandbox Code Playgroud)

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

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

1)如果我想在课外定义这样的功能,我必须做以下事情:

namespace std {
template <EnumT Index, typename EnumT, typename ValueT, size_t N>
EnumT &get (enum_array<EnumT, ValueT, N> &val)  
Run Code Online (Sandbox Code Playgroud)

但是,EnumT当指定第一个模板参数时,问题引起的问题仍然未知,因此该模板实际上形成了错误

如果我放在EnumT Index参数列表的第二个或更多位置,那么就存在一个问题,我无法真正指定这个参数,并且必须在其中指定其他东西,这看起来不像普通的std::get调用std::array.

2)如果我定义get的内部函数enum_array类作为友元函数一切都会貌似除了罚款的事实,那么它会被放置在同一个命名空间中的类enum_array属.把它放进去namespace std并不是最好的设计.

所以我的问题是:可以std::get用我用C++模板机制为这样的类提到的方式重载enum参数吗?

(想要指出这个问题主要是出于好奇而引起的std::get,std::array在我看来,事后并不是最有用的功能)

use*_*094 5

你还不能.你想要的是隐式模板参数.委员会喜欢这个想法,但希望看到所提出的符号与autodyp提到的符号的比较.我已经承诺为11月的标准会议制定新的草案.我可以包含你的例子吗?