std::tuple<...>::operator!=
,如果两个元组中至少有一个成员不同,则返回true。
我需要一个函数,如果两个比较的元组所有的成员都不同,则返回true:
template <class... Args>
bool areAllMembersDifferent( const std::tuple<Args...>& left, const std::tuple<Args...>& right )
{
bool allDiff = true;
// iterate through the tuples are set allDiff to false if one member's is different than other's
return allDiff;
}
受网络上找到的内容启发,我写了这个代码(改编自一个打印元组内容的函数):
template <std::size_t N, std::size_t, class = make_index_sequence<N>>
struct CheckTupleLoop;
template <std::size_t N, std::size_t J, std::size_t... Is>
struct CheckTupleLoop<N, J, index_sequence<Is...>> {
template <class Tup>
int operator()(bool& allDiff, const Tup &left,const Tup &right) {
if ( std::get<J>(left) == std::get<J>(right) )
allDiff = false;
return 0;
}
};
template <class... Args>
bool areAllMembersDifferent( const std::tuple<Args...>& left, const std::tuple<Args...>& right )
{
bool allDiff = true;
CheckTupleLoop<sizeof...(Args)>{}(allDiff,left,right);
return allDiff;
}
但这显然是不正确的,因为编译器报告我Error C2955 'CheckTupleLoop': use of class template requires template argument list
在C++11中,任何一种实现bool areAllMembersDifferent
的方法都是可接受的(使用或不使用我的第一次尝试方法)。
disjoint
函数,用于检查元组是否具有共同的元素。 - TemplateRex