gpt4 book ai didi

c++ - std::array 派生类聚合初始化

转载 作者:行者123 更新时间:2023-11-30 01:03:51 26 4
gpt4 key购买 nike

我正在制作一个派生自 std::array 的小辅助类。显然,构造函数不继承,它负责大括号初始化;例如:

template<typename T, size_t size>
struct foo : std::array<T,size>
{
foo(int a, int b)
: std::array<T,size>{a,b}
{
//nothing goes here since constructor is just a dummy that
//forwards all arguments to std::array constructor
}
}

int main()
{
foo<int,2> myobj = {1,2}; //brace initialization calls custom constructor with inner elements as arguments
}

参数的数量必须完全匹配,所以我倾向于在构造函数中使用类似可变参数的函数参数(因为我不仅每次都会使用数组中的 2 个元素)。使用这个,我如何将可变参数包转发到 std::array 构造函数?我对其他允许转发到 std::array 构造函数的大括号初始化方法持开放态度。

注意:std::initializer_list 需要运行时初始化,我正在寻找编译时/constexpr 兼容的方法。谢谢。

最佳答案

您可以使用完美转发构造函数:

template<class... U>
foo(U&&... u)
: std::array<T, size>{std::forward<U>(u)...}
{}

关于c++ - std::array 派生类聚合初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51821125/

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