2013-06-17 2 views
5

Ist es möglich, thread :: id in ein Dezimal- oder Oktalformat zu konvertieren?Dezimalwert von: cout << dec << boost :: this_thread :: get_id()

std::cout << std::showbase; 
cout << dec(or oct) << boost::this_thread::get_id() 

Ich habe immer Hex, zum Beispiel 0xdf08.

+3

Ich denke, 'get_id' gibt einen Zeiger auf eine Thread-spezifische Datenstruktur zurück. Die Zeiger sind nicht von 'dec' usw. betroffen. – celtschk

Antwort

7

sollten Sie in der Lage sein zu dem, was Ausgabeformat unter Verwendung von Standard-I/O-Manipulatoren will angeben:

#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 

bemerken jedoch, dass ein thread::id braucht nicht eine Nummer zu sein. Es kann sich auch um eine Nummer handeln, die jedoch auf andere Weise als auf der Standardausgabe ausgegeben werden kann, als wenn diese Nummer in std::cout eingegeben wird.

Die C++ 11 Standardspezifikation der Überlastung der operator << Annahme eines std::thread::id (was ich in ähnlicher Weise zu verhalten nehmen Boost-Korrespondent Überlastung für boost::thread::it), sagt:

[...] Fügt ein nicht näher bezeichnet Textdarstellung von ID in out.

Dies bedeutet, dass die Darstellung nicht eine Zahl sein kann, in welchem ​​Fall der Formatierung Manipulatoren wie std::hex, std::dec oder std::oct keinen Einfluss darauf haben kann.

+1

45,3k rep und du sagst" du solltest es können "; Wie wäre es mit "du kannst"? +1 sowieso. – Bathsheba

+0

Ich würde vermuten, dass eine Besetzung fehlt, weil 'get_id()' scheinbar einen Zeiger wie Typ oder einen Typ zurückgibt, bei dem der eigene Ausgabeoperator überladen ist. –

+0

@Bathsheba: Weil die Standardspezifikation für das Verhalten von 'std :: thread: id', die ich dem Verhalten von' boost :: thread: id' sehr ähnlich bin, besagt, dass 'operator <<' for ' thread :: id '" * Fügt eine unspezifizierte Textdarstellung von id in out * "ein. In der Theorie ist es vielleicht keine Nummer, was bedeutet, dass Manipulatoren sie nicht beeinflussen können. –