boost mpl pop_back中的序列相等

时间:2017-12-14 05:36:47

标签: c++ boost metaprogramming

我正在阅读David Abrahams's C++ Template Metaprogramming,他说:5.6序列平等他说:

  

重要的是,特别是在处理计算结果时,不要这样做   陷入依赖序列类型身份的陷阱。例如,   你不应该期望以下断言通过:

BOOST_STATIC_ASSERT((      // error
  boost::is_same<
      mpl::pop_back<mpl::vector<int, short> >::type
    , mpl::vector<int>
  >::value
)); 
     

对于大多数用途,上面比较的两种类型的行为是相同的,大多数时候你永远不会注意到差异。那   说,使用mpl :: pop_back进行专业化的结果   mpl :: vector不会是mpl :: vector的另一个特化!

     

和你一样   我们在第3章中探讨了尺寸分析,a   只能用两种相同类型调用的函数模板是   如果这些类型是序列,可能不会按预期工作。相同   用于仅匹配的类模板部分特化   当两个类型参数相同时。

     

检查的正确方法   序列相等总是使用相等的算法,如下所示:

BOOST_STATIC_ASSERT((        // OK
  mpl::equal<
      mpl::pop_back<mpl::vector<int, short> >::type
    , mpl::vector<int>
  >::value
));

我在这里不明白:“那就是说,在mpl :: vector的特化上使用mpl :: pop_back的结果不会是mpl :: vector的另一个特化”,那么{{的结果是什么? 1}}这里?

Boost manual on pop_back表示返回类型是“后可扩展序列”,不是mpl::popback后向可扩展序列吗?

1 个答案:

答案 0 :(得分:0)

它将是某种构造的序列类型,你可以在

中查看vector的pop_back_impl