gpt4 book ai didi

c++ - 是否可以根据整数模板参数构造成员数组的元素?

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

假设:

template<class T,int N>
struct A {
A(): /* here */ {}

T F[N];
};

我需要 F[] 的元素用{0,1,2,...,N-1} build .如果可能的话,我想通过将最后一层定义为 template<class T> struct A<T,0> 来避免递归定义的模板结构。并做一些复杂的模板技巧。 C++11 初始化列表有帮助吗?

这类似于Template array initialization with a list of values , 但它不构造值增加的元素。它稍后在运行时循环中设置它。

最佳答案

您可以使用可变值模板和构造函数委托(delegate)来做到这一点:

template<int... I> struct index {
template<int n> using append = index<I..., n>; };
template<int N> struct make_index { typedef typename
make_index<N - 1>::type::template append<N - 1> type; };
template<> struct make_index<0> { typedef index<> type; };
template<int N> using indexer = typename make_index<N>::type;

template<class T, int N>
struct A {
template<T...I> A(index<I...>): F{I...} {}

A(): A(indexer<N>{}) {}

T F[N];
};

这使用来自 Calling a function for each variadic template argument and an array 的序列包生成器

关于c++ - 是否可以根据整数模板参数构造成员数组的元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12836708/

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