如何在参数行中使用变量?

时间:2010-12-15 20:39:14

标签: c++ qt4

我正在使用SOCI从我的QT4 C ++应用程序中建立MYSQL连接。我可以硬编码mysql服务器IP,用户名和密码,但我宁愿将这些信息作为变量传递。

例如,我想做类似的事情,但没有接受这些参数的函数:

char host [9];
sprintf(host, "192.x.x.x");
session sql(mysql, "host=%s db=dbname user=user password=password", host);

我也尝试过:

string host = "192.x.x.x";

session sql(mysql,
            boost::format("host=%1% db=dbname user=user password='pword'",
                          %host));

但这也失败了。

更新:我能够像这样解决问题:

QString connection;
connection.append("host=" + host +
                  " db=dbname user=" + uname +
                  " password=" + pword);

session sql(mysql, connection.toLatin1().data());

3 个答案:

答案 0 :(得分:1)

使用string streams

然后你可以构建字符串并连接变量。最后致电.str().c_str()

答案 1 :(得分:1)

尝试使用QString的arg函数。

session sql(mysql, QString("host=%1 db=%2 user=%3 password=%4").arg(sqlserver).arg(dbname).arg(user).arg(password));

我知道这很难看,Qt应该提出一个更漂亮的解决方案,但它确实有效。

答案 2 :(得分:1)

你不能随意传递任何需要包含格式的字符串1的函数,然后传递任意数量的函数。 C ++根本不起作用。你需要在传入之前构建你的字符串。怎么样?其他两个答案提供了方法,即使它们使session构造函数的调用语义错误(这是你要弄清楚的部分)。你也可以考虑使用boost :: format,或者如果你想成为邪恶的话,可以考虑使用sprintf。