std::tuple<...>::operator!=
कम से कम एक दो तुलनात्मक टुपल्स के सदस्य अलग हैं, तो यह सच है।मैं कैसे जांच सकता हूं कि दो टुपल्स के सभी सदस्य अलग हैं या नहीं?
मैं एक समारोह है कि सच वापसी होगी अगर दो तुलना tuples के सभी सदस्यों अलग हैं की आवश्यकता होगी:
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
सी ++ 11 में bool areAllMembersDifferent
का कोई भी कार्यान्वयन स्वीकार्य होगा (मेरा पहला प्रयास दृष्टिकोण का उपयोग या नहीं)।
आप दो की सामग्री की जांच करने के लिए इसका मतलब क्या प्राप्त करने के लिए आपको क्या चाहिए निम्नलिखित सी ++ 11 अनुरूप समाधान का उपयोग कर सकते tuples? मैं उलझन में आया * सच हो जाएगा यदि ** ** ** के सभी सदस्य अलग हैं * – Jonas
@ जोनास: जांचें कि क्या दो टुपल्स के सभी सदस्य अलग हैं। पोस्ट संपादित किया गया। – jpo38
बूस्ट। हाना में 'डिसजॉइंट' फ़ंक्शन है जो जांचता है कि टुपल्स में तत्व समान हैं या नहीं। – TemplateRex