gpt4 book ai didi

c++ - 生成模板实例列表并在其上调用静态函数

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

假设我有一组模板 template<int N> A{}template<int N> B{}等等模板 C , D ....他们都有一个静态成员函数init() .

我想写一个生成 A<0> 的元函数, B<1> , C<2>等等。让我们将这个可变元函数命名为 SeqInst .这个元函数还有一个静态成员函数 init()依次调用所有 A<0>::init() , B<1>::init()等等。

我试着写 SeqInst作为 variadoc 模板,然后实例化 SeqInst<A, B, C>并使用它来形成另一个模板的参数列表 Initializer :所以里面 SeqInst我喜欢使用:

template<typename... T>
struct Initializer {
static void init() {(T::init(), ...);}
};

毕竟它应该是这样的:

using si = SeqInst<A,B,C>;
si::init();

这最终应该调用A<0>::init()B<1>::init()等等。

最佳答案

这是 std::index_sequence 的工作.我们只是制作一个大小合适的序列,并用它来调用 init() 并折叠一个逗号:

template <template <int> class... Z>
struct SeqInst {
static void init() {
init(std::make_index_sequence<sizeof...(Z)>{});
}

private:
template <size_t... Is>
static void init(std::index_sequence<Is...> ) {
(Z<Is>::init(), ...);
}
};

关于c++ - 生成模板实例列表并在其上调用静态函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44526215/

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