Я использовал BOOST_STRONG_TYPEDEF в своем коде для разделения различных типов идентификаторов на основе std::string (чтобы я мог иметь, например, SERVER_ID и FILE_ID, и случайно не передать идентификатор сервера, когда функция ожидает идентификатор файла).

Сейчас я отлаживаю свой код, и когда я перебираю набор объектов этого определения типа, было бы полезно напечатать текущий элемент. К сожалению, шаблонная природа boost делает вывод очень неудобным для чтения:

(gdb) p сервер

$ 11 = (const mpn :: SER_ID &) @ 0x756660: {, std :: allocator>, boost :: detail :: empty_base> >> = {, std :: allocator>, boost :: detail :: empty_base>>> > = {, std :: allocator>, boost :: detail :: empty_base> >> = {, std :: allocator>, boost :: detail :: empty_base >> = {, std :: allocator>, boost :: равенство_параметров2, std :: allocator>, boost :: detail :: empty_base> >> = {, std :: allocator>, boost :: detail :: empty_base >> = {> = {},},},},} ,},}, t = "B" ...}

Есть ли способ как-нибудь привести объект к строке (которую C ++ допускает с static_cast) и распечатать его нормально?

0
user2891462 6 Апр 2017 в 12:05

2 ответа

Лучший ответ

Оказывается, BOOST_STRONG_TYPEDEF включает базовый объект в качестве атрибута t typedef:

(gdb) p server.t
0
user2891462 7 Мар 2018 в 13:44

Есть ли способ как-то привести объект к строке

Да, вам нужно определить симпатичный принтер для него. Документация. Пример.

0
Employed Russian 6 Апр 2017 в 14:28