2013-06-02 4 views

ответ

1

Лично, если вы собираетесь что маршрут для отображения что-то, не нужно иметь пользователю не делать дополнительную работу:

#include <iostream> 

template<typename T> 
void showMessage(T &&t) { 
    std::cout << t << "\n"; 
} 

template<typename Head, typename... Tail> 
void showMessage(Head &&head, Tail&&... tail) { 
    std::cout << head; 
    showMessage(std::forward<Tail>(tail)...); 
} 

int main() { 
    showMessage("value1: ", 5, " and value2: ", 'a'); 
} 

Вот live example. Любой поток должен работать, включая поток строк и поток файлов. Имейте в виду, что это очень похоже на использование потока и действительно стоит того, если вы делаете другие вещи вместе с его отображением.

4

Вот один из способов:

std::ostringstream msg; 
msg << "ERROR: THE MAX IS: " << max; 
showMessage(msg.str()); 
1

Сочетание std::string и std::to_string() дает прикосновение C++ 11 благости:

#include <iostream> 
#include <string> 

using namespace std; 


int main() { 
    int max = 42; 
    std::string mess("ERROR: THE MAX IS: "); 
    mess += std::to_string(max); 
    std::cout << mess; 
} 

LIVE EXAMPLE

Если вы хотите использовать строку в качестве аргумента функции, принимающей const char*, вы можете использовать std::string::c_str(), чтобы получить строку стиля C из std::string:

func(mess.c_str()); 
0

Для этого нет возможности использовать C++, строковые литералы таковы, и они обычно постоянны. Вам придется либо использовать перегруженный строковый класс, либо вам нужно заставить showMessage принимать аргументы и делать для вас какое-то форматирование.

// simple version - take a single string. 
void showMessage(const std::string& message) { 
    // your old code, e.g. MessageBoxA(NULL, message.c_str(), "Message", MB_OK); 
} 

// complex version, take lots of strings. 
void showMessage(std::initializer_list<std::string> args) { 
    std::string message = ""; 
    for (auto str : args) 
     message += str; 
    showMessage(message); 
} 

int main(int argc, const char* argv[]) { 
    showMessage("Simple version"); 
    showMessage({ "This program is: ", argv[0], ". Argument count is: ", std::to_string(argc) }); 
    return 0; 
} 
Смежные вопросы