Проблемы с конвертацией в C ++ (ожидается строка) - PullRequest
1 голос
/ 31 октября 2011

У меня есть функция, к которой я не могу прикоснуться. Является ли она «создателем журналов», она помещает что-то для печати в файл и показывает его при запуске файла.Проблема в том, что функция получает только const string, поэтому, если я хочу что-то напечатать, мне нужно преобразовать все в этот тип данных (я не могу использовать cout).

функции itoa & atoi не являются стандартными функциями, поэтому яне может использовать это ни.C ++ очень «особенный» с типами данных и не очень легко принимает преобразования, так что это мой вопрос: как я могу преобразовать каждый тип данных в строку для целей журнала?

Возможно, мне следует проверить тип данныхна функции, чтобы преобразовать вещи и вернуть их в stringstream (ведь я, конечно, должен преобразовать в строку).

Итак, есть ли какой-нибудь совет, как это сделать?

Ответы [ 4 ]

5 голосов
/ 31 октября 2011

boost::lexical_cast инкапсулирует использование ostringstream, так что вы мог бы использовать это. В противном случае код не так сложен:

template<typename T>
std::string
toString( T const& object )
{
    std::ostringstream results;
    results << object;
    return results.str();
}

(Нет смысла использовать stringstream здесь; ostringstream в основном достаточно.

1 голос
/ 31 октября 2011

Вы можете использовать

  • станд :: stringstream

или

  • boost lexical_cast <>
0 голосов
/ 31 октября 2011

Я предполагаю, что функции ожидают const std :: string &?

Ваш подход с std :: stringstream правильный.В качестве альтернативы вы можете просто написать метод toString () для класса, который вы хотите напрямую выводить.Однако обычно, когда требуется вывести объекты в файл, перегружается оператор << для этого конкретного типа. </p>

0 голосов
/ 31 октября 2011

Да, если вы хотите, чтобы произвольный тип в строковом представлении stringstream промежуточный звучал как решение.

...