2

这就是我想要做的:

showMessage("ERROR: THE MAX IS:" + max);

基本上,我想将一个变量(在本例中为一个 int)与一个字符串连接起来,以将其作为参数传递。

我怎样才能在 C++ 中做到这一点?

4

4 回答 4

4

这是一种方法:

std::ostringstream msg;
msg << "ERROR: THE MAX IS: " << max;
showMessage(msg.str());
于 2013-06-02T05:03:17.913 回答
3

就个人而言,如果您要走这条路线来显示某些东西,则无需让用户做额外的工作:

#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');
}

这是一个活生生的例子。任何流都应该工作,包括字符串流和文件流。请记住,这与仅使用流非常相似,并且只有在显示它的同时做其他事情时才真正值得。

于 2013-06-02T05:27:02.573 回答
1

结合std::stringstd::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;
}

活生生的例子

如果要将字符串用作接受 a 的函数的参数const char*,则可以使用std::string::c_str()来获取 C 样式的字符串std::string

func(mess.c_str());
于 2013-06-02T05:04:52.457 回答
1

没有一种常用的 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;
}
于 2013-06-02T06:00:11.923 回答