gpt4 book ai didi

c++ - 如何初始化模板大小的数组?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:04:00 25 4
gpt4 key购买 nike

我想初始化一个没有默认构造函数的模板大小的对象数组,如以下代码所示:

#include <array>

template<std::size_t N>
class Foo
{
public:
class Bar
{
Foo<N> & _super;

public:
Bar(Foo<N> *super) :
_super(*super)
{
}
};

std::array<Bar, N> _array;

Foo(void) :
_array{{}} // We need {this, ...} N times
{
}
};


int main(void)
{
Foo<3> foo;
(void)foo;
return 0;
}

这是一种表达方式吗:“我想要一个包含 N 个对象的数组,所有对象都使用相同的参数进行初始化”?我认为模板元编程有一种方法,但我不知道该怎么做。

最佳答案

make_index_sequence 的帮助下,一切皆有可能:

   Foo() : Foo(std::make_index_sequence<N>()) {} 
template <size_t... I> Foo(std::index_sequence<I...> ) : _array{((void)I, this)...} {}

请注意 _array 构造函数中的逗号运算符 (,) - 由@Quentin 提供(与函数调用相反)。

关于c++ - 如何初始化模板大小的数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36842532/

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