2013-06-17 20 views

risposta

7

Si dovrebbe essere in grado di specificare il formato di output desiderato utilizzando manipolatori I/O standard:

#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 

Tuttavia, notare che un thread::id non ha bisogno di essere un numero. Inoltre, potrebbe essere un numero, ma potrebbe essere stampato sullo standard output in modo diverso rispetto al semplice inserimento di tale numero in std::cout.

Il C++ 11 Di serie il sovraccarico di operator << accettare un std::thread::id (che presumo a comportarsi in modo simile a un sovraccarico di amplificare corrispondente boost::thread::it), dice:

[...] inserisce un non specificata rappresentazione del testo dell'ID in out.

Ciò significa la rappresentazione non può essere un numero affatto, nel qual caso la formattazione manipolatori come std::hex, std::dec o std::oct non può avere alcuna influenza su di esso.

+1

45.3k rep e tu dici" dovresti essere in grado di "; che ne dici di "puoi"? +1 comunque. – Bathsheba

+0

Direi che manca un cast, perché 'get_id()' sembra restituire un tipo di puntatore o un tipo che ha il proprio operatore di output sovraccarico. –

+0

@Bathsheba: Poiché la specifica Standard per il comportamento di 'std :: thread: id', che presumo sia molto simile al comportamento di' boost :: thread: id', dice che 'operatore <<' per ' thread :: id' "* Inserisce una rappresentazione di testo non specificata di id in * *. Quindi in teoria potrebbe non essere un numero, il che significa che i manipolatori potrebbero non influenzarlo –

Problemi correlati