Поддержка const_string в операторе std :: ostream <<

В настоящее время я использую очень умный пакет boost :: const_string до тех пор, пока http://libcxx.llvm.org/ не будет доступен предварительно упакованным на Ubuntu или GCC, сделайте его __ versa_string (в заголовке ext / vstring.h ) его строковая реализация по умолчанию. libcxx std :: string , а также __ versa_string по умолчанию использует оптимизацию _small-string (SSO). Поддержка по умолчанию для вывода в std :: Однако ostream отсутствует. Код

#include 
#include 

const_string x;
std::cout << x << endl;

не будет работать, пока мы не введем x в c-строку с помощью c_str () , которая станет

std::cout << x.c_str() << endl;

, которая компилируется и работает, как ожидалось. Я добавил следующую строку в const_string.hpp

template 
inline std::ostream & operator << (std::ostream & os, const boost::const_string & a)
{
    return os.write(a.data(), a.size());
}

. Это должно улучшить производительность по сравнению с x.c_str () , потому что size () уже известен и не должен быть вычисляется путем поиска NULL как в c_str () . Я работаю на себя, но не уверен, работает ли это во всех случаях. Я что-то пропустил?

10
задан Nordlöw 18 April 2013 в 07:56
поделиться