मेरे पास मेरे नेमस्पेस ns
में एक फ़ंक्शन है जो मुझे एसटीएल कंटेनर प्रिंट करने में मदद करता है। उदाहरण के लिए:बूस्ट :: एक एसडीडी कंटेनर प्रारूप और कस्टम प्रिंटिंग
template <typename T>
std::ostream& operator<<(std::ostream& stream, const std::set<T>& set)
{
stream << "{";
bool first = true;
for (const T& item : set)
{
if (!first)
stream << ", ";
else
first = false;
stream << item;
}
stream << "}";
return stream;
}
यह operator <<
के साथ सीधे मुद्रण के लिए महान काम करता है:
std::set<std::string> x = { "1", "2", "3", "4" };
std::cout << x << std::endl;
हालांकि
, का उपयोग कर boost::format
असंभव है:
std::set<std::string> x = { "1", "2", "3", "4" };
boost::format("%1%") % x;
समस्या काफी स्पष्ट है: बूस्ट पता नहीं है कि मैं अपने कस्टम operator <<
का उपयोग उन प्रकारों को प्रिंट करने के लिए करना चाहूंगा जिनके पास मेरे नेमस्पेस से कुछ लेना देना नहीं है। using
boost/format/feed_args.hpp
में घोषणा जोड़ने के बाहर, बनाने के लिए कोई आसान तरीका है operator <<
?
मैं दृढ़ता से sugge आप [इस सवाल] (http://stackoverflow.com/q/4850473/500104) पर एक नज़र डालें, क्योंकि यह मूल रूप से आपकी आवश्यकताओं का उत्तर देता है। मैं एक डुप्लिकेट के रूप में बंद करने के लिए वोट नहीं दूंगा, हालांकि, आपका वास्तविक प्रश्न अलग है ('ऑपरेटर << 'के बारे में)। – Xeo
@Xeo: मेरा वास्तविक कोड किसी भी कंटेनर को मुद्रित करने के लिए एक बहुत ही समान दृष्टिकोण का उपयोग करता है। वैसे भी, समस्या यह नहीं है कि 'ऑपरेटर <<' के साथ एक कंटेनर मुद्रित करने के लिए, यह उन चीजों के लिए वही ओवरलोड काम कैसे करें, जहां कोएनिग जो भी चाहता है वह नहीं करता है। –