gpt4 book ai didi

c++ - 如何在 for 循环中使用 const 变量来生成模板类?

转载 作者:行者123 更新时间:2023-12-03 07:13:46 24 4
gpt4 key购买 nike

我有一个类似的代码

template <size_t N>
class A
{
template <size_t N>
someFunctions() {};
};

现在我想创建该类的实例,并在 for 循环中调用其中的函数以获得一组许多值,例如

// in main()

int main()
{
for (int i = 1; i <= 100; i++)
{
const int N = i; // dont know how to do this
A<N> a;
a.functionCalls();
}
}

如何做到这一点?希望有一种方法可以做到这一点。

最佳答案

这需要一个称为模板的东西,它是预期的形式expansion statements将采取,这看起来像 for 循环,但实际上是多次实例化的函数中的模板化 block 。

当然,有一个解决方法。我们可以滥用通用 lambda 来声明某种本地模板化 block 并自己实例化它:

template <typename T, T... S, typename F>
constexpr void for_sequence(std::integer_sequence<T, S...>, F f) {
(static_cast<void>(f(std::integral_constant<T, S>{})), ...);
}

此函数采用整数序列并实例化 lambda F 次数与序列长度相同。

它的用法如下:

for_sequence(std::make_index_sequence<100>(), [](auto N) { /* N is from 0 to 99 */
A<N + 1> a; /* N + 1 is from 1 to 100 */
a.functionCalls();
});

这里,N 可以作为模板参数发送,因为它是一个具有 constexpr 到整数类型的转换运算符的对象。更准确地说,它是一个值不断增加的 std::integral_constant

Live example

关于c++ - 如何在 for 循环中使用 const 变量来生成模板类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59200748/

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