gpt4 book ai didi

c++ - 实验性 make_array,我可以使用 brace-init 列表作为参数吗?

转载 作者:太空宇宙 更新时间:2023-11-04 13:12:40 26 4
gpt4 key购买 nike

我尝试实现一个 make_array 的版本,它不完全相同,但非常类似于:

http://en.cppreference.com/w/cpp/experimental/make_array

我发现这段代码似乎不起作用,我对此是否正确?

using MyType = std::pair<int, float>;

constexpr auto the_array = make_array<MyType>({1, 7.5f});

这里的问题似乎是,即使 make_array 明确指定了第一个模板参数,参数仍然来自参数包,这与明确指定的参数无关。

这意味着代码将不起作用。

是否有任何解决方案可以使上述代码正常工作?

我的版本

template <class Val = void, class... Args,
class = std::enable_if_t<std::is_void<Val>{}, int>>
constexpr std::array<
std::tuple_element_t
<0,
std::tuple<Args...>>,
sizeof...(Args)> makeArray(Args &&... args) {
return {{std::forward<Args>(args)...}};
}

template <class Val = void, class... Args,
class = std::enable_if_t<!std::is_void<Val>{}, int>>
constexpr std::array<
Val,
sizeof...(Args)> makeArray(Args &&... args) {
return {{std::forward<Val>(args)...}};
}

最佳答案

make_array 是一个可变参数模板函数,它接受任何类型的参数。然后它将对这些参数执行隐式转换以获得数组的基类型。因此,除非您指定每个参数的类型,否则编译器将不得不使用模板参数推导。

并且无法推导出花括号初始化列表(在 auto 变量之外)。因此,在构造每个成员时,您必须明确提及类型名称。

关于c++ - 实验性 make_array,我可以使用 brace-init 列表作为参数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39035147/

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