来自整数的variadic模板参数
Variadic template parameters from integer
给定我有那种类型
template<int ...Is>
struct A {};
我可以从整数D中"生成" A<0, 1, 2, 3, 4, 5,..., d>
类型吗?
我想到了
之类的东西template<int d>
struct B : A<std::index_sequence<d>...> {}
但行不通。
其他选择是手动专业:
template<int d>
struct B;
template<>
struct B<0>: A<> {};
template<>
struct B<1>: A<0> {};
template<>
struct B<2>: A<0, 1> {};
template<>
struct B<3>: A<0, 1, 2> {};
,但显然我无法编写B<3000> b;
[编辑]我的实际用例比这更复杂。我不想重新结束std :: integer_sequence,但更复杂。
我们已经在标准库中拥有您想要的东西-std::make_integer_sequence
。如果要使用自己的类型A<...>
,则可以执行此操作:
template<int... Is>
struct A {};
template<class>
struct make_A_impl;
template<int... Is>
struct make_A_impl<std::integer_sequence<int, Is...>> {
using Type = A<Is...>;
};
template<int size>
using make_A = typename make_A_impl<std::make_integer_sequence<int, size>>::Type;
,然后为A<0, ..., 2999>
写
make_A<3000>
有其他方法 - 使用函数签名与A<...>
类型匹配:
#include <type_traits>
template<int ...Is>
struct A {};
namespace details
{
template <int ...Is>
auto GenrateAHelper(std::integer_sequence<int, Is...>) -> A<Is...>;
}
template<int I>
using GenerateA = decltype(details::GenrateAHelper(std::make_integer_sequence<int, I>()));
static_assert(std::is_same<GenerateA<3>, A<0, 1, 2>>::value, "");
相关文章:
- variadic模板中的模板参数推导失败
- 将variadic函数作为参数的函数
- 类型检测:使用variadic参数正确实现计算平均值的函数
- 如何在variadic模板参数中找到所有类的对象
- 如何访问variadic模板函数中的参数
- 来自整数的variadic模板参数
- 模板模板参数,具有混合类型和非类型variadic参数
- 示例自定义共享_ptr-我如何传递构造函数参数 - 我在此处使用variadic模板
- variadic模板歧义 - 空参数包
- 如何使用variadic参数包的嵌套模板类
- 如何使用variadic模板参数使模板函数调用
- variadic函数模板的参数被作为模板非类型传递
- variadic模板函数会以相反的顺序调用lambda参数
- 将C数组转换为Variadic模板参数
- 如何在variadic模板中采用嵌套参数包
- Variadic模板参数包只接受无符号int或size_t作为其类型
- 如何使用std:字符串参数迭代variadic函数
- 调用来自Variadic模板中一包函子的参数的函数
- variadic宏可从未知参数集合中生成字符串向量
- 在Variadic模板中交换两个参数