私は通知に失敗すると、そのでしたstd::basic_istream
、std::basic_ostream
とstd::basic_iostream
(それぞれがとりもpublicコンストラクタを持っていましたstd::basic_streambuf*
)。
これは、多型の一般的なプログラミング類似物を、pimplのイディオムと同じように使用できるようにします。
つまり、この方法で、特殊なstreambufタイプを作成し、それをbasic_
[io] で使用できますstream
。特殊なストリームクラスを作成する必要はありません。(機能は制限されています。同じストリームに新しいバッファーを割り当てることはできません。また、バッファーの有効期間と所有権を外部から追跡する必要があります)。
専用のbasic_
[io] fstream
とbasic_
[io]にはstringstream
それぞれ、関連するバッファタイプの完全なインスタンスが含まれています。つまり、特殊なストリームタイプのインスタンスは、その内部バッファでのみ機能し、別のタイプではなく、同じタイプのインスタンスでも機能します。生のbasic_
[io] を使用することstream
は、これに対する(不格好な)回避策です。
template<class C, class TR>
class snazzy_filebuf: public std::basic_streambuf<C, TR>
{
protected:
typename TR::int_type overflow(TR::int_type) override;
typename TR::int_type underflow(TR::int_type) override;
typename TR::int_type pbackfail(TR::int_type) override;
public:
snazzy_filebuf();
};
.....
snazzy_filebuf<char> buf;
std::basic_ostream<char> o_s(&buf);
o_s << "Hello, world\n";
basic_ios
て、basic_streambuf*
あなたがすることができる前から、俳優が公にされているのは理にかなっているようですusing B::B;
。古い実装にはプロキシーctorがあっただけだと思います:-ctorが正しいA(int x) : B(x) {}
場合でも問題なく機能します。B
protected