- 締切済み
C++のstringstreamについて
こんにちは。 C++のstringstreamについて教えてください。 stringstreamはbasic_stringstream<char, char_traits<char>,allocator<char> >がtypedefされたもので、他にbasic_stringstream<wchar_t, char_traits<wchar_t>,allocator<wchar_t> >というwstringstreamというものも存在していますよね。 同じtemplateクラスに異なるパラメータを渡しているというのはわかるのですが、stringstreamとwstringstreamでは内部実装は異なるものだと思っています。 たとえばwchar_tの場合、文字列に数字などを入れる場合、swprintfという関数を使用しますよね。 同様にcharの場合は、文字列に数字などを入れる場合、sprintfという関数を使用することになるかと思います。 basic_stringstreamクラスはこの関数の切り分けはどのように実現させているのでしょうか? 私は関数のオーバーロード(sprintfとswprintfを同じ名前でラップ)か、クラスの特殊化程度しか思いつきませんでした。 char_traitsが魔法の種のような気がするのですがいまいちよくわかりません。 よろしければご教授願います。 /* 開発環境はVisualStudio2008 academic editionです。 */
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- rinkun
- ベストアンサー率44% (706/1571)
swprintfやsprintfはCの関数でしょう。C++のクラスを作成するのにCの関数を使うという仮定はいかがなものでしょうか。 まあ基本的にbasic_stringstreamは共通で、charとwchar_tで変える必要がある部分はchar_traitsのメソッドを特殊化することで対応できると思いますけど。