【发布时间】:2016-11-14 06:22:23
【问题描述】:
我正在尝试从 Abrahams 和 Gurtovoy 的“C++ 模板元编程”一书中重现示例“3.1 Dimensional Analysis”。有时,他们会比较一个值(mpl::vector_c 类型)的“维度”与转换后的值的“维度”相同(mpl::transform 应用于两个 mpl::vector_c)。
对我来说,比较总是false,我不明白我哪里出错了。没有转换的简化示例:
#include <iostream>
#include <boost/mpl/vector_c.hpp>
#include <boost/mpl/vector.hpp>
#include <boost/mpl/transform.hpp>
#include <boost/mpl/equal.hpp>
#include <boost/type_index.hpp>
using boost::typeindex::type_id_with_cvr;
using namespace boost;
using X1 = mpl::vector_c<int, 1, 2, 3>;
using X2 = mpl::vector<mpl::int_<1>, mpl::int_<2>, mpl::int_<3>>;
using CMP = mpl::equal<X1, X2>;
int main() {
std::cout << "X1: " << type_id_with_cvr<X1>().pretty_name() << std::endl;
std::cout << "X2: " << type_id_with_cvr<X2>().pretty_name() << std::endl;
std::cout << "CMP: " << type_id_with_cvr<CMP>().pretty_name() << std::endl;
std::cout << "CMP::type: " << type_id_with_cvr<CMP::type>().pretty_name() << std::endl;
std::cout << "CMP::type::value: " << CMP::type::value << std::endl;
}
从输出:
CMP: boost::mpl::equal<boost::mpl::vector_c<int, 1l, 2l, 3l, 21474
83647l, 2147483647l, 2147483647l, 2147483647l, 2147483647l, 214748
3647l, 2147483647l, 2147483647l, 2147483647l, 2147483647l, 2147483
647l, 2147483647l, 2147483647l, 2147483647l, 2147483647l, 21474836
47l, 2147483647l>, boost::mpl::vector<mpl_::int_<1>, mpl_::int_<2>
, mpl_::int_<3>, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na,
mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::
na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na>, boost::is_s
ame<mpl_::arg<-1>, mpl_::arg<-1> > >
CMP::type: mpl_::bool_<false>
CMP::type::value: 0
【问题讨论】:
-
@jv_ 你找到了错误,谢谢。请将评论转换为答案。我想我现在可以得出一个解决方案,但是如果您知道构建用于
equal的等式谓词的正确方法,我将不胜感激。