समस्या: यदि आवश्यक नहीं है, तो निम्न कोड बहुत अभिव्यक्तिपूर्ण और संक्षेप में होगा, यह इस तथ्य के लिए नहीं था कि यह संकलित नहीं होता है।इस तथ्य के आसपास कैसे काम करें कि std :: function में कोई ऑपरेटर == नहीं है?
यह संकलित नहीं करता है क्योंकि आप ऑपरेटर ==() के साथ std :: फ़ंक्शन इंस्टेंस की तुलना नहीं कर सकते हैं। और std :: find() ठीक उसी तरह करने की कोशिश करता है।
बेशक, मैं पूरी तरह से कार्यान्वयन के लिए जा सकता हूं, लेकिन जैसा कि मैं नीचे हूं और जैसा कि मैं नीचे कोड के साथ हूं, मैं जिद्दी हूं, मैं कुछ "निकटतम संभव" ढूंढ रहा हूं जो काम करता है।
कौन मुझे नीचे दिए गए कोड का एक सुंदर पुनर्लेख प्रदान कर सकता है जो वही काम करता है?
#include <functional>
#include <vector>
typedef std::function<bool(int)> Tester_t;
typedef std::vector<Tester_t> TesterSet_t;
bool Test(TesterSet_t &candidates, int foo)
{
TesterSet_t dropouts;
for(auto& tester : candidates)
{
if(!tester(foo))
{
droputs.push_back(tester);
}
}
while(!dropouts.empty())
{
// The following line is not compiling because std::function has no operator==()
TesterSet_t::iterator culprit =
std::find(candidates.begin(), candidates.end(), dropouts.back());
candidates.erase(culprit);
dropouts.pop_back();
}
return !candidates.empty();
}
क्या आप अंतर्निहित समस्या का वर्णन कर सकते हैं जिसे आप हल करने का प्रयास कर रहे हैं? कारण 'std :: function' में '==' ऑपरेटर नहीं है क्योंकि इस तरह से फ़ंक्शंस की तुलना करने के लिए इसका कोई अर्थ नहीं है। आप कैसे निर्धारित कर सकते हैं कि दो कार्य बराबर हैं या नहीं? –
इसी तरह (संभावित रूप से डुप्लिकेट): http://stackoverflow.com/questions/5847072/comparing-stdfunction –
संक्षिप्त उत्तर: आपको एक ऐसी संरचना बनाना चाहिए जिसमें एक अनूठी कुंजी और 'std :: function' हो, और उसके पास वेक्टर हो उन structs। वास्तव में एक खोज कुंजी के रूप में 'std :: function' का उपयोग करने के लिए बहुत अधिक समझ नहीं आता है। [यहां देखें] (http://stackoverflow.com/questions/4430425/stdvector-of-stdfunction) –