C ++ Извлечение std :: string из списка аргументов переменной длины - PullRequest
4 голосов
/ 17 апреля 2011

Привет всем!Я пытаюсь сделать простую копию sprintf, которая возвращает отформатированную строку, но я попадаю в маленькую загвоздку ...

Видимо, используя список аргументов переменной длины, вы не можете передать std ::экземпляр строки.

У меня уже есть синтаксический анализатор, работающий должным образом с int, double, float, char, const char *, char * ... Мне еще предстоит заставить работать строки.: \

Если вам интересно, я получаю ошибку компиляции: /root/learncpp/StringFormat/main.cpp:8: warning: cannot pass objects of non-POD type 'struct std::string' through '...'; call will abort at runtime

Основная причина, по которой я это делаю, заключается в том, что я могу иметь удобное форматирование без необходимостиполагаться на сторонние библиотеки, но при этом не нужно добавлять ".c_str ()" к каждому экземпляру строки, который я использую.

Помощь в этом будет приветствоваться.Возможно, существует другая версия списков аргументов переменной длины, созданных специально для C ++?

РЕДАКТИРОВАТЬ: я только что понял, если вы передаете указатель на строку (то есть с использованием префикса &), он работает хорошо.Все, что вам нужно сделать, это разыменовать строковый указатель в пользовательском sprintf, передавая адрес std :: string!

Тем не менее, было бы неплохо увидеть, есть ли способ поддержать строку непосредственно через переменнуюсписки аргументовСпасибо!

1 Ответ

3 голосов
/ 17 апреля 2011

Нет - как сказал компилятор, вам разрешено передавать только объекты типа POD в функцию с переменными числами.

То, что вы обычно хотите сделать, - это исключить использование в первую очередь функции с переменными числами, например, используя iostream вместо чего-то вроде printf (или stringstream вместо sprintf).

...