我正在尝试在代码中使用and_,但是返回类型有问题。我正在尝试将其与其他接受并返回true_type或false_type的元编程构造一起使用,并且还将SFINAE重载与这些类型一起使用。 boost :: mpl :: and_和boost :: mpl :: or_从剩下的mpl中返回不同的类型。至少,对我来说似乎是这样。

mpl_::failed************ boost::is_same<mpl_::bool_<true>, boost::integral_constant<bool, true> >::************)


那么,我如何编写以下内容,使其通过断言?

template <typename T, typename U>
void foo(const T& test, const U& test2)
{
    typedef typename boost::mpl::and_<typename utilities::is_vector<T>, typename utilities::is_vector<U> >::type asdf;
    BOOST_MPL_ASSERT(( boost::is_same<asdf, boost::true_type::value> ));
}

void fooer()
{
    std::vector<int> test1;
    std::vector<int> test2;
    foo(test1, test2);
}

最佳答案

BOOST_MPL_ASSERT需要一个元函数谓词,即其返回类型可以解释为“ true”或“ false”的元函数,即,其返回类型例如为boost :: mpl :: true_或boost :: mpl :: false 。

按照定义,类型“ asdf”符合此要求,因此无需针对任何元编程抽象将其“ true”进行显式检查,编写BOOST_MPL_ASSERT(( asdf ))即可满足您的要求。

当然,如果需要,您也可以将其显式地与“ true”进行比较,但是随后必须将其与boost :: mpl :: true_进行比较,这与您期望的boost :: true_type并不完全相同,因此混乱!

关于c++ - 提高MPL AND_类型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17957728/

10-11 23:02
查看更多