gpt4 book ai didi

c++ - 为枚举索引数组重载 std::get

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:44:48 24 4
gpt4 key购买 nike

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

class enum_array <typename EnumT, typename ValueT, size_t N>

另一方面,在尝试实现所有标准的 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)

但问题是在指定第一个模板参数时 EnumT 仍然是未知的,所以这个模板实际上是错误的

如果我将 EnumT Index 放在参数列表的第二个或更远的地方,那么就会出现问题,我不能真正只指定这个参数,并且必须指定其他内容,但不会看起来像对 std::array 的普通 std::get 调用。

2) 如果我在 enum_array 类中定义 get 函数作为友元函数,一切看起来都很好,除了它会被放置在同一个命名空间中enum_array 所属的类。将它放在 namespace std 中并不是最好的设计。

所以我的问题是:std::get 是否可以使用 C++ 模板机制以我提到的此类类的方式重载带有枚举参数的方法?

(想指出这个问题主要是出于好奇,毕竟 std::get 在我看来并不是 std::array 最有用的函数)

最佳答案

你还不能。你要的是Implicit Template Parameters .委员会喜欢这个想法,但希望看到提议的符号与 dyp 提到的 auto 符号的比较。我已 promise 为 11 月的标准 session 制定新的草案。我可以包含您的示例吗?

关于c++ - 为枚举索引数组重载 std::get,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25627805/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com