Ответ 1
Вам нужно обернуть формат в вызове 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)
Я хочу добавить строку, которую я форматирую, используя библиотеку boost следующим образом
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> &'
У кого-нибудь есть понимание?
Вам нужно обернуть формат в вызове 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)
Добавление ".str()" к результирующему объекту формата должно быть достаточно (и работает для меня). Из вашего вопроса неясно, как вы это сделали, но я заметил, что ваш пример пропускает закрывающие parens на 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() );