2013-06-17 11 views

Odpowiedz

7

Powinieneś być w stanie określić, co chcesz formatu wyjściowego przy użyciu standardowych manipulatorów I/O:

#include <iomanip> 

// ... 

std::cout << std::oct << boost::this_thread::get_id() << std::endl; 
//   ^^^^^^^^ 
//   Octal 

std::cout << std::dec << boost::this_thread::get_id() << std::endl; 
//   ^^^^^^^^ 
//   Decimal 

std::cout << std::hex << boost::this_thread::get_id() << std::endl; 
//   ^^^^^^^^ 
//   Hexadecimal 

jednak zauważyć, że thread::id nie musi być liczbą. Może to być również liczba, ale może być wydrukowany na standardowe wyjście w inny sposób niż tylko wstawienie tej liczby do std::cout.

C++ 11 Standardowa specyfikacja przeciążenie od operator << wyrażenie zgody na std::thread::id (co zakładam zachowywać się podobnie do Boost na przeciążenie korespondentem boost::thread::it), mówi:

[...] Wstawia nieokreślone reprezentacja tekstowa z id do out.

Oznacza to reprezentacja może być wiele w ogóle, w którym to przypadku manipulatorów formatowanie takich jak std::hex, std::dec lub std::oct nie mają żadnego wpływu.

+1

45.3k rep i mówisz "powinieneś być w stanie"; co powiesz na "możesz"? +1 i tak. – Bathsheba

+0

Zgaduję, że brakuje obsady, ponieważ 'get_id()' zwraca wskaźnik taki jak typ lub typ, który ma przeciążony własny operator wyjścia. –

+0

@Bathsheba: Ponieważ Standardowa specyfikacja zachowania 'std :: thread: id', która jak przypuszczam jest bardzo podobna do zachowania' boost :: thread: id', mówi, że 'operator <<' for ' thread :: id' "* Wstawia nieokreśloną reprezentację tekstową id do out *". Więc teoretycznie może to nie być liczba, co oznacza, że ​​manipulatory mogą na nią nie wpływać. –