【发布时间】:2021-12-31 01:23:23
【问题描述】:
我想用没有标准构造函数的对象填充大小为 N 的 std::array。
std::array<non_std_con,N> myArray;
(具体来说,我是std::array<kissfft<float>, 64>)
这会导致错误
错误:使用已删除的函数... 标准构造函数
设置
您可以使用初始化器列表填充数组:
std::array<non_std_con,N> myArray{non_std_con{init1,init2},non_std_con{init1,init2},...}
初始化列表需要 N 个对象。
您可以使用参数包构建数组:
template <class... Params>
auto constexpr build_array(Params... params)
{
std::array<non_std_con, sizeof...(params)> myArray= {params...};
return myArray;
}
问题
有没有办法反过来使用它并构建一个参数包 一个参数:
std::array<non_std_con,N> buildArray(inti1,init2);
这将构建一个 N non_std_con 数组,其中每个对象都被初始化为 {init1,init2}
感谢您的宝贵时间
【问题讨论】:
-
那么,简单的
auto my_array = std::array<non_std_con,N>{{init1, init2}};有用吗? -
不幸的是没有。这会导致错误:无法将“init1”从“int”转换为“non_std_con”
-
等等,你的类型可以复制吗?
-
您能简单地实际使用您在代码示例中使用的类型吗?这样就不用猜测了?
-
嗯,应该是可复制构造的。我认为
std::array<kissfft<float>,64> my_array{kissfft<float>(1<<15, false)}也不起作用?
标签: c++ arrays c++20 initializer-list parameter-pack