小编kyu*_*oon的帖子

c ++ recursive mpl :: equal问题?

我需要一个支持类型递归的mpl :: equal like过程.

namespace mpl = boost::mpl;

BOOST_MPL_ASSERT(( mpl::equal< 
 mpl::vector<int, char>, 
 typename mpl::push_back<mpl::vector<int>, char>::type > )); // OK
Run Code Online (Sandbox Code Playgroud)

以上编译很好,但如果我在mpl :: transform或mpl :: fold中使用它,visual studio 2010 rc1会抱怨.

typedef mpl::vector<
 mpl::vector<int, char>,
 mpl::vector<char, char>> type_1;
typedef mpl::transform<
 mpl::vector<
  mpl::vector<int>,
  mpl::vector<char>>,
 mpl::push_back<mpl::_, char>>::type type_2;
BOOST_MPL_ASSERT(( mpl::equal<type_1, type_2> )); // FAILS
Run Code Online (Sandbox Code Playgroud)

但是,这些工作......

BOOST_MPL_ASSERT(( mpl::equal<
    typename mpl::at_c<type_1, 0>::type, 
    typename mpl::at_c<type_2, 0>::type> )); // OK
BOOST_MPL_ASSERT(( mpl::equal<
    typename mpl::at_c<type_1, 1>::type, 
    typename mpl::at_c<type_2, 1>::type> )); // OK
Run Code Online (Sandbox Code Playgroud)

是mpl :: equal不能用于动态生成的递归类型,还是我的语法有问题?

任何建议都会非常感激.

c++ templates boost boost-mpl

5
推荐指数
1
解决办法
485
查看次数

标签 统计

boost ×1

boost-mpl ×1

c++ ×1

templates ×1