我正在尝试在我的代码中使用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);
}
答案 0 :(得分:1)
BOOST_MPL_ASSERT需要一个元函数谓词,即一个元函数,其返回类型可以解释为“true”或“false”,也就是说,其返回类型例如是boost :: mpl :: true_或boost :: mpl ::假。
如定义的那样,“asdf”类型符合这个要求,所以没有必要针对“true”的任何元编程抽象显式检查它,写BOOST_MPL_ASSERT(( asdf ))
完全符合你的要求。
答案 1 :(得分:1)
可能更容易使用C ++ 11:
static_assert(asdf::value, "T and U aren't both vectors!");
或者
static_assert(std::is_same<asdf, boost::true_>::value, "T and U aren't both vectors!");