मैं एक गणना प्रकार एक वर्ग के अंदर परिभाषित मिल गया है, और मैं वर्ग के एक सदस्य के रूप में उन वस्तुओं का एक unordered_set बनाना चाहते हैं:कक्षा के अंदर परिभाषित एनम के लिए std :: हैश को ओवरराइड कैसे करें?
#include <unordered_set>
class Foo {
public:
enum Bar {
SOME_VALUE
};
// Error: implicit instantiation of std::hash
std::unordered_set<Bar> getValues() const {
return _values;
}
private:
std::unordered_set<Bar> _values;
};
अब, मैं जानता हूँ कि स्पष्ट जवाब एक जोड़ने के लिए है unordered_set करने के लिए कस्टम हैश फंक्शन:
std::unordered_set<Bar, BarHasher>
हालांकि, वहाँ एक तरह से बार enum के लिए std :: हैश विशेषज्ञ ताकि जो कोई unordered_map का उपयोग करता है स्वचालित रूप से हैशिंग व्यवहार हो जाता है, तो क्या मैं सोच रहा हूँ है।
यह हर दूसरे डेटा प्रकार के साथ काम करता है, लेकिन enums नहीं - क्योंकि enums को आगे घोषित नहीं किया जा सकता है।
इस काम के लिए, मुझे enum परिभाषा के बाद std :: हैश की परिभाषा डालना होगा, लेकिन पहले उपयोग से पहले, जिसका अर्थ है कि मुझे इसे कक्षा के बीच में रखना होगा शरीर, जो काम नहीं करेगा।
Enums को आगे घोषित किया जा सकता है, लेकिन मुझे नहीं लगता कि यह कैसे मदद करता है। – chris
यह सी ++ 14 में तय किया गया है: http://stackoverflow.com/a/29618545/951890 –