gpt4 book ai didi

C++ 递归 mpl::equal 问题?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:42:06 25 4
gpt4 key购买 nike

我需要一个支持类型递归的类似于 mpl::equal 的过程。

namespace mpl = boost::mpl;

BOOST_MPL_ASSERT(( mpl::equal<
mpl::vector<int, char>,
typename mpl::push_back<mpl::vector<int>, char>::type > )); // OK

上面的编译很好,但是如果我在 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

然而,这些工作......

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

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

如有任何建议,我们将不胜感激。

最佳答案

mpl::transform不会创建 mpl::vector<>在你的情况下,但是 mpl::vector2<>的。这些是不同的类型,即使它们在语义上是等价的。所以如果你写:

typedef mpl::vector2< 
mpl::vector2<int, char>, mpl::vector2<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> ));

断言不会触发。

关于C++ 递归 mpl::equal 问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2388102/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com