C ++ 1y / C ++ 14:将静态constexpr数组转换为非类型模板参数包?

安德鲁·托马佐斯(Andrew Tomazos)

假设我有一个constexpr数组(已知界限),其静态存储持续时间:

constexpr T input[] = /* ... */;

我有一个需要包装的输出类模板:

template<T...> struct output_template;

我想像这样实例化output_template

using output = output_template<input[0], input[1], ..., input[n-1]>;

一种方法是:

template<size_t n, const T (&a)[n]>
struct make_output_template
{
    template<size_t... i> static constexpr
    output_template<a[i]...> f(std::index_sequence<i...>)
    { return {}; };

    using type = decltype(f(std::make_index_sequence<n>()));
};

using output = make_output_template<std::extent_v<decltype(input)>, input>::type;

我缺少更清洁或更简单的解决方案吗?

丹尼尔·弗雷(Daniel Frey)

也许您认为这更干净:

template< const T* a, typename >
struct make_output_template;

template< const T* a, std::size_t... i >
struct make_output_template< a, std::index_sequence< i... > >
{
    using type = output_template< a[ i ]... >;
};

using output = make_output_template<
    input,
    std::make_index_sequence< std::extent_v< decltype( input ) > >
>::type;

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在C ++ 11或C ++ 1y中对非类型模板参数包进行排序?

来自分类Dev

C ++ 1y / 14:自动变量模板?

来自分类Dev

返回类型推导的类方法?C ++ 1y

来自分类Dev

CRTP和c ++ 1y返回类型推导

来自分类Dev

C ++ 1y自动功能类型推导

来自分类Dev

gcc编译选项std = c ++ 1y和std = c ++ 14之间的区别

来自分类Dev

c ++ 11 / 1y lambda函数的类型签名是什么?

来自分类Dev

C ++ 1y没有从std :: bind到std :: function的可行转换

来自分类Dev

C ++:元组列表C ++ 11 / 1y

来自分类Dev

C ++ 1y的内存管理中的定型释放功能

来自分类Dev

在qt(mingw)中启用c ++ 1y

来自分类Dev

C ++ 14 / 1y:“ operator +必须带有一个或两个参数”的标准引用?

来自分类Dev

extern数组作为带有clang c ++ 1z的非类型模板参数

来自分类Dev

c ++ 1y将允许派生类对基类变量进行类内初始化吗?

来自分类Dev

C ++ 11非类型模板参数包扩展

来自分类Dev

在C ++ 1y中,'constexpr'非静态成员函数不会隐式地成为'const';添加“ const”以避免行为改变

来自分类Dev

C ++ 1y / C ++ 14:不允许在常量表达式中分配对象的生存期吗?

来自分类Dev

C ++ 1y / C ++ 14:不允许在常量表达式中分配对象的生存期吗?

来自分类Dev

此递归多态C ++ 1y lambda调用有什么问题?

来自分类Dev

在C ++ 1y中是否需要公共的类typedef?

来自分类Dev

C ++ 1y中的内存管理中的大小调整分配功能

来自分类Dev

C ++非类型模板的模板参数,请参考* this

来自分类常见问题

具有非类型模板参数的C ++ 20 lambda

来自分类Dev

具有非类型模板参数的C ++ 20 lambda

来自分类Dev

C ++模板专业化-非类型模板参数'__formal的非法类型

来自分类Dev

C ++模板专业化-非类型模板参数'__formal的非法类型

来自分类Dev

C ++非类型模板参数:整数类型的typedef是整数类型吗?

来自分类Dev

了解有关C ++ 1y的提案N3650中有关可恢复功能的示例

来自分类Dev

非类型模板参数中的C ++类类型:推导指南失败

Related 相关文章

  1. 1

    在C ++ 11或C ++ 1y中对非类型模板参数包进行排序?

  2. 2

    C ++ 1y / 14:自动变量模板?

  3. 3

    返回类型推导的类方法?C ++ 1y

  4. 4

    CRTP和c ++ 1y返回类型推导

  5. 5

    C ++ 1y自动功能类型推导

  6. 6

    gcc编译选项std = c ++ 1y和std = c ++ 14之间的区别

  7. 7

    c ++ 11 / 1y lambda函数的类型签名是什么?

  8. 8

    C ++ 1y没有从std :: bind到std :: function的可行转换

  9. 9

    C ++:元组列表C ++ 11 / 1y

  10. 10

    C ++ 1y的内存管理中的定型释放功能

  11. 11

    在qt(mingw)中启用c ++ 1y

  12. 12

    C ++ 14 / 1y:“ operator +必须带有一个或两个参数”的标准引用?

  13. 13

    extern数组作为带有clang c ++ 1z的非类型模板参数

  14. 14

    c ++ 1y将允许派生类对基类变量进行类内初始化吗?

  15. 15

    C ++ 11非类型模板参数包扩展

  16. 16

    在C ++ 1y中,'constexpr'非静态成员函数不会隐式地成为'const';添加“ const”以避免行为改变

  17. 17

    C ++ 1y / C ++ 14:不允许在常量表达式中分配对象的生存期吗?

  18. 18

    C ++ 1y / C ++ 14:不允许在常量表达式中分配对象的生存期吗?

  19. 19

    此递归多态C ++ 1y lambda调用有什么问题?

  20. 20

    在C ++ 1y中是否需要公共的类typedef?

  21. 21

    C ++ 1y中的内存管理中的大小调整分配功能

  22. 22

    C ++非类型模板的模板参数,请参考* this

  23. 23

    具有非类型模板参数的C ++ 20 lambda

  24. 24

    具有非类型模板参数的C ++ 20 lambda

  25. 25

    C ++模板专业化-非类型模板参数'__formal的非法类型

  26. 26

    C ++模板专业化-非类型模板参数'__formal的非法类型

  27. 27

    C ++非类型模板参数:整数类型的typedef是整数类型吗?

  28. 28

    了解有关C ++ 1y的提案N3650中有关可恢复功能的示例

  29. 29

    非类型模板参数中的C ++类类型:推导指南失败

热门标签

归档