मैक्रोज़ से बचें जब आप कर सकते हैं! वे कोड छिपाते हैं, चीजों को डीबग करने के लिए कठिन बनाते हैं, दायरे का सम्मान नहीं करते हैं, आदि
आप केनई के रूप में एक साधारण कार्य का उपयोग कर सकते हैं। आप सभी फैंसी और लचीला प्राप्त करना चाहते हैं, तो आप अपने खुद जोड़तोड़ लिख सकते हैं:
#include <iostream>
#include <iomanip>
using namespace std;
ostream& hex4(ostream& out)
{
return out << "0x" << hex << setw(4) << setfill('0');
}
int main()
{
cout << hex4 << 123 << endl;
}
यह है कि यह एक छोटे से अधिक सामान्य बनाता है। ऊपर दिए गए फ़ंक्शन का उपयोग किया जा सकता है क्योंकि operator<<
पहले से ही इस तरह अधिभारित है: ostream& operator<<(ostream&, ostream& (*funtion_ptr)(ostream&))
। endl
और कुछ अन्य मैनिपुलेटर्स भी इस तरह कार्यान्वित किए जाते हैं।
आप अंकों की संख्या कार्यावधि में निर्दिष्ट करने की अनुमति देना चाहते हैं, तो हम एक वर्ग का उपयोग कर सकते हैं: आकार संकलन समय पर निर्धारित किया जा सकता है, तो
#include <iostream>
#include <iomanip>
using namespace std;
struct formatted_hex
{
unsigned int n;
explicit formatted_hex(unsigned int in): n(in) {}
};
ostream& operator<<(ostream& out, const formatted_hex& fh)
{
return out << "0x" << hex << setw(fh.n) << setfill('0');
}
int main()
{
cout << formatted_hex(4) << 123 << endl;
}
, तथापि, के साथ-साथ बस का उपयोग कर सकते एक समारोह टेम्पलेट [इस सुझाव के लिए जॉन Purdy के लिए धन्यवाद]:
template <unsigned int N>
ostream& formatted_hex(ostream& out)
{
return out << "0x" << hex << setw(N) << setfill('0');
}
int main()
{
cout << formatted_hex<4> << 123 << endl;
}
बढ़ावा एक आउटपुट स्वरूप पुस्तकालय है: http://stackoverflow.com/questions/119098/which-io-library-do-you-use देखना -इन-आपका-सी-कोड/119194 # 119194 –