У меня есть код, который std::to_string()
является переменной, тип которой является параметром шаблона. Предположим, что код:Сделать std :: to_string работать с указателями void нравится operator <<?
template <typename T>
std::string foo(const T& t) {
return std::string("I got ") + std::to_string(t);
}
Теперь, иногда этот параметр должен быть void *
; и я хотел бы получить адрес в строке, например. "I got 0xdeadbeef"
. Нет проблем, не так ли? Я должен получить его так же, как если бы я сделал std::cout << my_ptr
, правильно? ... К сожалению, для меня это не тот случай. Хорошо,
- Является ли это «законным» для меня, чтобы код выше работал, как я описал?
- Кроме настаивают на использовании потока в
foo()
, есть что-то лучше делать, чем перегрузитьstd::to_string
дляvoid*
«с (с использованиемstd::stringstream
в там дляoperator<<
)?
void * не является строкой, я не могу напечатать ее как строку (мне понадобится какая-то функция 'as_hex()' или использовать stringstream); но ваше предложение интереснее, чем это. +1. – einpoklum
'reinterpret_cast' почти наверняка ошибается, и это будет UB. – Barry
@ Барри как? Если 'void * ptr' содержит строку с нулевым завершением, это будет нормально, в другом случае UB будет даже с символом' char * ptr' и без кастинга. – LibertyPaul