通过弹出最后一个类型来创建新的元组类

本吉·米兹拉希(Benji Mizrahi)

我尝试了以下代码,但它给出了:

main.cpp:29:22:错误:聚合'pop<std::tuple<int, char, float> > p'类型不完整且无法定义

我想念什么?

template <typename T>
struct pop;

template <typename E, typename... Ts>
struct pop<tuple<Ts..., E>> {
    using result = tuple<Ts...>;
};

tuple<int, char, float> t;
typename pop<decltype(t)>::result p;

如果Ts ...必须在类型列表的末尾,为什么在本示例中它可以通过http://en.cppreference.com/w/cpp/language/parameter_pack起作用

template<class A, class B, class...C> void func(A arg1, B arg2, C...arg3)
{
    container<A,B,C...> t1;  // expands to container<A,B,E1,E2,E3> 
    container<C...,A,B> t2;  // expands to container<E1,E2,E3,A,B> 
    container<A,C...,B> t3;  // expands to container<A,E1,E2,E3,B> 
}
哥伦布

tuple<Ts..., E>是非推论上下文。[temp.deduct.type] / 9:

如果P具有包含<T>的形式<i>,则将各个模板参数列表的每个参数Pi与的模板参数列表P的对应参数Ai进行比较A如果的模板参数列表P包含的包扩展不是最后一个模板参数,则整个模板参数列表都是非推导上下文。

这意味着您无法完全匹配您的部分专业化知识

使用C ++ 14,可以使用

template <class T, class=std::make_index_sequence<std::tuple_size<T>::value-1>>
struct pop;

template <typename Tuple, std::size_t... indices>
struct pop<Tuple, std::index_sequence<indices...>>
{
    using type = std::tuple<std::tuple_element_t<indices, Tuple>...>;
};

template <typename T>
using pop_t = typename pop<T>::type;

这样的

using t = std::tuple<int, char, float>;
static_assert( std::is_same<pop_t<t>, std::tuple<int, char>>{}, "" );

编译。

演示

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何通过一个类和方法来创建一个类的实例?

来自分类Dev

如何创建一个新的元组类型从一个旧的和Boost类型?

来自分类Dev

基于另一个类创建一个新的派生类型

来自分类Dev

如何创建一个类型类来考虑不同的容器类型?

来自分类Dev

创建一个类,该类通过读取多个CSV文件来创建字典-Python

来自分类Dev

Python:获取两个列表并通过合并它们来创建一个新列表

来自分类Dev

通过从第一个列表中取出第一项,从第二个列表中取出最后一个项来创建新列表

来自分类Dev

我是否应该经常创建一个类来指示python中的类型?

来自分类Dev

如何通过更改其中的一个特定字段来创建新的json字符串?

来自分类Dev

通过每次在Flutter中创建一个新实例来实现FirebaseAnalytics logEvent

来自分类Dev

通过子集另一个并添加后缀来循环创建多个新数据帧

来自分类Dev

通过修改另一个应用程序来创建新应用程序

来自分类Dev

jq 通过转换现有的来创建一个新的 json

来自分类Dev

如何通过对另一个向量使用条件来创建新向量?

来自分类Dev

通过评估另一个表达式来创建一个新列

来自分类Dev

如何在CSS中选择最后一个类或最后一个类型

来自分类Dev

根据类的“类”创建一个新的类实例

来自分类Dev

如何通过每隔一列减去第一列来创建一个新的数据框?

来自分类Dev

为什么可以声明一个方法来返回正在创建的同一类的类型?

来自分类Dev

覆盖CSS类,创建一个新的CSS类

来自分类Dev

如何通过平均一些列来从existig数据帧中创建一个新的数据帧

来自分类Dev

C ++创建一个静态类来存储指针

来自分类Dev

创建一个类来调用实体C#

来自分类Dev

通过单击并拖动来创建一个框

来自分类Dev

通过单击并拖动来创建一个框

来自分类Dev

我应该总是使用 shared_ptr 来创建一个类实例(而不是新的)吗?

来自分类Dev

通过向每个文本元素添加一个类来重新创建文本效果

来自分类Dev

我想通过创建另一个类的对象来存储值,但是它显示空指针异常

来自分类Dev

如何通过获取另一个数据框的滚动COLUMN总数/总和来创建新的数据框?

Related 相关文章

  1. 1

    如何通过一个类和方法来创建一个类的实例?

  2. 2

    如何创建一个新的元组类型从一个旧的和Boost类型?

  3. 3

    基于另一个类创建一个新的派生类型

  4. 4

    如何创建一个类型类来考虑不同的容器类型?

  5. 5

    创建一个类,该类通过读取多个CSV文件来创建字典-Python

  6. 6

    Python:获取两个列表并通过合并它们来创建一个新列表

  7. 7

    通过从第一个列表中取出第一项,从第二个列表中取出最后一个项来创建新列表

  8. 8

    我是否应该经常创建一个类来指示python中的类型?

  9. 9

    如何通过更改其中的一个特定字段来创建新的json字符串?

  10. 10

    通过每次在Flutter中创建一个新实例来实现FirebaseAnalytics logEvent

  11. 11

    通过子集另一个并添加后缀来循环创建多个新数据帧

  12. 12

    通过修改另一个应用程序来创建新应用程序

  13. 13

    jq 通过转换现有的来创建一个新的 json

  14. 14

    如何通过对另一个向量使用条件来创建新向量?

  15. 15

    通过评估另一个表达式来创建一个新列

  16. 16

    如何在CSS中选择最后一个类或最后一个类型

  17. 17

    根据类的“类”创建一个新的类实例

  18. 18

    如何通过每隔一列减去第一列来创建一个新的数据框?

  19. 19

    为什么可以声明一个方法来返回正在创建的同一类的类型?

  20. 20

    覆盖CSS类,创建一个新的CSS类

  21. 21

    如何通过平均一些列来从existig数据帧中创建一个新的数据帧

  22. 22

    C ++创建一个静态类来存储指针

  23. 23

    创建一个类来调用实体C#

  24. 24

    通过单击并拖动来创建一个框

  25. 25

    通过单击并拖动来创建一个框

  26. 26

    我应该总是使用 shared_ptr 来创建一个类实例(而不是新的)吗?

  27. 27

    通过向每个文本元素添加一个类来重新创建文本效果

  28. 28

    我想通过创建另一个类的对象来存储值,但是它显示空指针异常

  29. 29

    如何通过获取另一个数据框的滚动COLUMN总数/总和来创建新的数据框?

热门标签

归档