В настоящее время я использую очень умный пакет boost::const_string
, пока http://libcxx.llvm.org/ не будет доступен предварительно упакованным в Ubuntu или GCC, сделав его __versa_string
(в заголовке ext/vstring.h
) своимреализация строки по умолчанию.std::string
в libcxx, а также __versa_string
по умолчанию использует оптимизацию _small-string (SSO).Однако по умолчанию поддержка вывода на std::ostream
отсутствует.Код
#include <iostream>
#include <boost/const_string.hpp>
const_string<char> x;
std::cout << x << endl;
не будет работать, пока мы не введем x
в c-строку через c_str()
, которая становится
std::cout << x.c_str() << endl;
, которая компилируется и работает как ожидалось.Я добавил следующую строку в const_string.hpp
template <typename T>
inline std::ostream & operator << (std::ostream & os, const boost::const_string<T> & a)
{
return os.write(a.data(), a.size());
}
. Это должно улучшить производительность по сравнению с x.c_str()
, поскольку size()
уже известно и его не нужно вычислять путем поиска NULL
, как в * 1026.*.Я работаю на меня, но я не уверен, что это работает во всех случаях.Я что-то пропустил?