Конкатенация строк в вызове функции c ++ - PullRequest
0 голосов
/ 22 марта 2011

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

logger("The variable is: " + variable);

Функция определяется как

void logger(std::string message);

Я использую Qt, поэтому я не знаю, уместно ли это, но переменная всегда будет QString. Когда я попробовал это, он сказал бы, что нет функции-кандидата для

void logger(const QString);

Поэтому я подумал, почему бы не создать вторую функцию, в которой она ожидала бы конкатенацию:

void logger(std::string message);
void logger2(const QString message);

Хорошо скомпилировал, когда я сделал

logger2("The variable is: " + variable);

Однако, когда я отлаживал, переданная переменная сообщения была пустой строкой. Как мне заставить это работать, это возможно?

Ответы [ 2 ]

6 голосов
/ 22 марта 2011

Почему бы просто не сделать что-то вроде этого:

QString qs = "hello";
qs.toStdString();

Что касается конкатенации на лету, мне нравится использовать простой класс форматирования:

class Formatter
{
public:
    template<class Val> Formatter& operator<<(const Val& val)
    {
        ss_ << val;
        return * this;
    }
    operator string () const { return ss_.str().c_str(); }
private:
    std::stringstream ss_;
};

... который можно использовать так:

logger(Formatter() << "The variable is: " << variable);
0 голосов
/ 23 марта 2011

вы пробовали logger("The variable is: " + variable.toStdString()); ?

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