2016-12-19 11 views
0

В своей работе мы должны были заменить iostream с функцией void output(std::string):Как написать строку и строку int?

std::cout << "This is some output." << '\n'; 

<--Old-- 
--New--> 

output("This is some output"); 

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

int some_value = 5 
std::cout << "Some value: " << some_value << '\n'; 

<--Old-- 
--New--> 

int some_value = 5; 
std::stringstream tmp_stream; 
tmp_stream << "Some value: " << some_value << '\n'; 
output(tmp_stream.str()); 

Но мне не очень нравится это решение, так как он вводит две дополнительные строки кода и дополнительное использование однократной переменной. Знаете ли вы о других возможных более элегантных решениях?

+0

заморачиваться. Я был в состоянии предложить OP написал класс 'output_stream', который отправил вывод в функцию' output'. Либо сделав это правильно через streambuf, либо просто написав класс, у которого была куча 'operator <<'. Таким образом, им просто нужно изменить 'std :: cout' на' g_output'. Не могу написать этот ответ, потому что вопрос был закрыт как дубликат. –

+0

Благодарим за отзыв! – johannesmik

+0

@johannesmik Более общая версия, чем связанный дубликат, или ответы здесь должны были бы создать шаблон вариационной функции, см., Например, http://ideone.com/eVjnbv (комментарий для C++ 17). Таким образом вам просто нужно преобразовать 'std :: cout << a << b << c;' to 'to_output (a, b, c);'. – Holt

ответ

3

Вы можете использовать std::to_string для преобразования числовых типов в std::string, а затем объединить их перед вызовом output

output("Some value: " + std::to_string(some_value));