Для повышения производительности, я ищу, чтобы заменить:Использования подталкивания Кармы заменить зЬй :: stringstream для двойного в StD :: струнного преобразования
template<class T> std::string ToStringFixed(const T x, const unsigned int width = 8)
{
std::stringstream ss;
ss << std::setprecision(width) << std::fixed << x;
return ss.str();
}
С реализацией от повышающей кармы, как наш проект уже использует подталкивание и он, похоже, имеет значительное увеличение производительности над наивным решением выше.
Что-то вроде:
std::string ToString(double d)
{
using boost::spirit::karma::double_;
using boost::spirit::ascii::space;
using boost::spirit::karma::generate;
std::string s
std::back_insert_iterator<std::string> sink(s);
generate(sink, double_, d);
return s;
}
который принимается от: http://thisthread.blogspot.com/2011/04/generating-text-with-spirit-karma.html, кажется, на правильном пути, но это мне не ясно, как контролировать точность, или если такое решение может быть шаблон - дружелюбно для типов с плавающей точкой без использования признаков типа. (Ответы на использование через C++ 14 приемлемы.)
@NeilButterworth Насколько мне известно, std :: to_string не позволяет контролировать формат. Здесь я хочу контролировать точность. Другие функции также могут контролировать ширину вывода. Все это легко с std :: stringstream, но я хотел бы получить более ориентированное на производительность решение. – DiB