Boost Library Format; получение std :: string - PullRequest
12 голосов
/ 12 ноября 2010

Я хочу добавить строку, которую я форматирую, используя библиотеку надстроек следующим образом

boost::container::vector<std::string> someStringVector;
someStringVector.push_back(
    format("after is x:%f y:%f and before is x:%f y:%f\r\n") % 
    temp.x %
    temp.y %
    this->body->GetPosition().x %
    this->body->GetPosition().y;

Компилятор жалуется, что не может конвертировать типы, и я попытался добавить .str () в конец возвращаемого формата, но все равно пожаловался

Полученное сообщение об ошибке:

error C2664: 'void boost::container::vector<T>::push_back(
  const std::basic_string<_Elem,_Traits,_Ax> &)' :
  cannot convert parameter 1 from
    'boost::basic_format<Ch>' to 
    'const std::basic_string<_Elem,_Traits,_Ax> &'

У кого-нибудь есть понимание?

Ответы [ 2 ]

19 голосов
/ 12 ноября 2010

Вам нужно обернуть формат в вызове boost :: str, вот так:

str( format("after is x:%f y:%f and before is x:%f y:%f\r\n")
     % temp.x % temp.y % this->body->GetPosition().x % this->body->GetPosition().y)
6 голосов
/ 13 ноября 2010

Добавление «.str ()» в результирующий объект формата должно быть достаточно (и у меня работает).Из вашего вопроса не совсем понятно, как вы это сделали, но я заметил, что в вашем примере отсутствуют закрывающие скобки в push_back ().

Обратите внимание, что вы хотите вызвать str () для объекта форматаВозвращенный из последнего оператора%, самый простой способ сделать это - просто обернуть всю строку формата в скобки следующим образом:

boost::container::vector<std::string> someStringVector;
someStringVector.push_back(
    (format("after is x:%f y:%f and before is x:%f y:%f\r\n") % 
    temp.x %
    temp.y %
    this->body->GetPosition().x %
    this->body->GetPosition().y).str() );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...