2013-06-17 43 views
5

Ondalık veya sekizlik bir biçimde iş parçacığı :: id koçlamak mümkün mü? Ondalık değeri: cout << dec << boost :: this_thread :: get_id()

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

Ben örneğin 0xdf08 için, her zaman altıgen var.

+3

Sanırım 'get_id' iş parçacığına özgü bir veri yapısına bir işaretçi döndürüyor. İşaretçiler "dec" vb. Etkilenmezler. – celtschk

cevap

7

Standart I/O manipülatörler kullanarak istediğini çıkış biçimi belirtmek gerekir:

#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 

Ancak, thread::id sayı olması gerekmez dikkat edin. Ayrıca, bir sayı olabilir, ancak standart çıktıya, std::cout'a bu numarayı eklemek yerine farklı bir şekilde yazdırılabilir.

bir std::thread::id (I benzer şekilde davranmasını varsayalım en boost::thread::it için muhabir aşırı Artıracak) kabul operator << aşırı yük diyor C++ 11 Standart özellikleri:

[...] belirtilmemiş bir ekler out'a ait kimlik gösterimi.

Bu

gösterimi, tüm bir dizi olabilir ki bu durumda, üzerinde herhangi bir etkiye sahip olmayabilir, örneğin std::hex, std::dec veya std::oct olarak manipülatörler biçimlendirme olmayan anlamına gelir.

+1

45.3k rep ve "yapabilmeniz gerekir" diyorsunuz; "Yapabilirsin" nasıl? Yine de +1. – Bathsheba

+0

Bir dökümün eksik olduğunu tahmin ediyorum, çünkü 'get_id()' türünde bir işaretçiyi ya da kendi çıkış operatörüne aşırı yüklenen bir tip gibi bir işaretçi döndürüyor gibi görünüyor. –

+0

@Bathsheba: std :: thread: id 'davranışının standart belirtiminden dolayı, boost :: thread: id' davranışına çok benzediğimi varsayalım, operatörün '' ' iş parçacığı :: id' "* kimliğinin belirtilmemiş bir metin gösterimini ekler *." Yani teoride bir sayı olmayabilir, bu da manipülatörlerin onu etkilemeyeceği anlamına gelir –

İlgili konular