Как использовать переменную в строке аргумента? - PullRequest
0 голосов
/ 15 декабря 2010

Я использую SOCI для создания соединений MYSQL из моего приложения QT4 C ++. Я мог бы жестко закодировать IP-адрес, имя пользователя и пароль сервера MySQL, но вместо этого я предпочел бы передать эту информацию в виде переменной.

Например, я хотел бы сделать что-то вроде этого, но нет функций, принимающих такие параметры:

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 ]

1 голос
/ 15 декабря 2010

Попробуйте использовать функцию arg QString.

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

Я знаю, что это ужасно, и Qt должен придумать более красивое решение, но оно работает.

1 голос
/ 15 декабря 2010

Вы не можете просто произвольно передать любую функцию, которая ожидает строку, которая содержит форматирование, а затем переменное количество чего угодно после нее. С ++ просто так не работает. Вам нужно собрать свою строку перед передачей. Как? Два других ответа предоставляют способы, даже если они неправильно понимают семантику вызова конструктора session (это ваша задача выяснить). Вы также можете рассмотреть возможность использования boost :: format или, если хотите быть злым, sprintf.

1 голос
/ 15 декабря 2010

Используйте строковые потоки .

Затем вы можете создавать строковые и объединять переменные по мере необходимости.Позвоните .str().c_str() в конце.

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