makroları kaçının! Kodları gizler, hata ayıklamalarını zorlaştırır, kapsamlara saygı göstermezler.
Basit bir işlevi KenE tarafından sağlanan şekilde kullanabilirsiniz. Eğer fantezi ve esnek tüm almak istiyorsanız, o zaman kendi manipülatör yazabilirsiniz:
#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;
}
Bu biraz daha genel hale getirir. Yukarıdaki fonksiyonun kullanılmasının nedeni operator<<
'un zaten aşırı yüklendiği için: ostream& operator<<(ostream&, ostream& (*funtion_ptr)(ostream&))
. endl
ve diğer bazı manipülatörler de böyle uygulanmaktadır.
Eğer hane sayısı zamanında belirtilen izin vermek istiyorsak, bir sınıf kullanabilirsiniz: boyutu derleme zamanında tespit edilebilir varsa
#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;
}
Ancak, hem de sadece kullanabilir bir fonksiyon şablonu [bu öneriye Jon Purdy sayesinde]:
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;
}
artırmak bir çıkış biçimi kütüphanesi var http://stackoverflow.com/questions/119098/which-io-library-do-you-use bakınız -in-sizin-c-kod/119194 # 119194 –