我正在阅读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
不是后背扩展序列吗?
它将是某种构造的序列类型,您可以在