Если вы хотите изменить все свои операторы включения на собственный внутренний заголовок mystringstream.h
, вы можете использовать специализацию шаблонов, чтобы выполнить это, но с таким большим количеством предостережений я бы этого не сделал.
- Вы должны обязательно использовать этот заголовок везде , который вы бы включили
sstream
ранее.
- Ваша реализация STL не должна уже специализироваться
basic_stringstream <char, char_traits<char>, allocator<char> >
- В вашей реализации STL или любом другом заголовке, который вы включаете, не должно быть уже созданного потока строк
Как говорится, в этом простом примере кодовой панели .
// mystringstream.h
namespace std
{
// This class exists solely to "trick" the compiler into
// considering this allocator a new, different type
class newallocator : public allocator<char>
{
};
// template specialize std::stringstream to inherit from basic_stringstream
// using our newallocator in place of std::allocator<char>
template <>
class basic_stringstream<char, char_traits<char>, allocator<char> >
: public basic_stringstream <char, char_traits<char>, newallocator >
{
public:
basic_stringstream()
{
precision(16); // or whatever precision you like
}
};
}
Мне лично не нравится это решение, потому что оно существенно изменяет поведение стандартной библиотеки, а не расширяет его.