首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >利用Boost MPL计算矢量长度

利用Boost MPL计算矢量长度
EN

Stack Overflow用户
提问于 2016-03-23 16:47:21
回答 1查看 107关注 0票数 2

我在C++03中使用Boost MPL,计算存储在另一个mpl::向量中的mpl::向量的长度存在问题。对于这个简单的例子,外部向量包含3个内部向量,而每个内部向量仅包含一个条目,即mpl::int_<0>。我使用的代码如下:

代码语言:javascript
复制
struct ComputeLengths
{
    template <typename vectorOfVectors> struct apply
    {
        typedef typename mpl::transform
                        <
                            vectorOfVectors, 
                            mpl::size<mpl::_1>
                        >::type type;
    };
};

BOOST_MPL_ASSERT(( boost::mpl::equal<vectorOfVectors, mpl::vector<mpl::vector_c<int, 0>, mpl::vector_c<int, 0>, mpl::vector_c<int, 0> >::type> ));

typedef typename ComputeLengths::template apply<vectorOfVectors>::type lengths;

BOOST_MPL_ASSERT(( boost::mpl::equal<lengths, mpl::vector_c<int, 1, 1, 1>::type> ));

在第二个断言中,我得到了一个错误,即:

错误:函数模板"mpl_::assertion_failed“的实例与参数列表不匹配 参数类型有:(mpl_::failed ************boost::mpl::equal< boost::mpl::v_item< mpl_::long_< 1L>,boost::mpl::vector0< mpl_::na>,0>,0>,0>,boost::mpl::vector3_c< int,1,1,0>,boost::is_same< mpl_::,mpl::_>>::************)

我在这里做错什么了?

编辑:当以下断言成功时,我发现长度计算似乎是正确的:

代码语言:javascript
复制
BOOST_MPL_ASSERT(( boost::mpl::equal< typename mpl::size<vectorOfVectors>::type,  typename mpl::int_<3>::type > ));
BOOST_MPL_ASSERT(( boost::mpl::equal< typename mpl::at<vectorOfVectors, mpl::int_<0> >::type, typename mpl::int_<1>::type > ));
BOOST_MPL_ASSERT(( boost::mpl::equal< typename mpl::at<vectorOfVectors, mpl::int_<1> >::type, typename mpl::int_<1>::type > ));
BOOST_MPL_ASSERT(( boost::mpl::equal< typename mpl::at<vectorOfVectors, mpl::int_<2> >::type, typename mpl::int_<1>::type > ));

所以问题在于断言语句。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-24 14:20:27

jv_向我指出了答案,答案可以找到这里 (多亏了Andy )。基本上,我在上面的所有代码中都不正确地使用了mpl::equal。相等使用mpl::is_same (默认的第三个模板参数),它检查类型是否完全相同。我需要向mpl提供第三个模板参数::equal,mpl::equal_to,以便将积分常量的值逐一进行比较。最后的assert语句如下所示:

代码语言:javascript
复制
BOOST_MPL_ASSERT(( mpl::equal<lengths, mpl::vector_c<int, 1, 1, 1>::type, mpl::equal_to<mpl::_1, mpl::_2> >));
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36184065

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档