c++ - 模板定义的模板参数数量(非常元)

标签 c++ templates generics

template<int Degree> using curve = // some definition
template<int MaxDegree> using curve_variant = std::variant<curve<1>, curve<2>, .. curve<MaxDegree>>;
在上面的例子中,传递给 std::variant 模板的参数数量会根据 curve_variant 的参数而变化:
例如,curve_variant<4>将解析为 std::variant<curve<1>, curve<2>, curve<3>, curve<4>> .
由于 MaxDegree 在编译时是已知的,这感觉是可能的。但我也不知道如何开始实现这一点。

最佳答案

std::integer_sequence helper ,你可能会这样做:

template <typename Seq> struct curve_variant_impl;

template <int ... Is>
struct curve_variant_impl<std::integer_sequence<int, Is...>>
{
    using type = std::variant<curve<1 + Is>...>;
}; 

template <int MaxDegree>
using curve_variant = typename curve_variant_impl<std::make_integer_sequence<int, MaxDegree>>::type;

关于c++ - 模板定义的模板参数数量(非常元),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63633004/

相关文章:

c++ - 如何在 C++ 中使用 system() 函数打开应用程序

c++ - 依赖于构造函数参数的模板类特化?

c++ - 如何将模板中具有非依赖名称的 msvc++ 代码移植到 Linux?

scala - 如何在Scala中多次继承通用特征?

c++ - 是否可以将 AddressSanitizer 和 ThreadSanitizer 合并到一个版本中?

c++ - 第一次从现有的 main 编写头文件和 .cpp;无输出

c++ - 头文件重定义错误 - cpp

java - : "from.<Integer>"?是什么意思

java - 为什么我不能将 List<X<Long>> 作为 List<X<?>> 的参数

c++ - 值到类型的运行时映射