Boost Mpl Pop_back中的序列平等



我正在阅读David Abrahams的C 模板元编程,在CH 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 ::向量将不是MPL :: vector的另一个专业化!

当你 在我们探索了第3章中对维度分析的探索中 只能使用两种相同类型的功能模板是 如果这些类型是序列,则可能无法按预期工作。相同 进行类模板部分专业化,仅匹配 当两个类型的参数相同时。

正确检查的正确方法 序列平等始终使用相等的算法,如下:

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的另一个专业化",那么mpl::popback的结果是什么?

pop_back上的Boost手册说返回类型是"返回可扩展的序列",mpl::vector不是后背扩展序列吗?

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

中查看pop_back_impl

最新更新