template<typename E, typename T>
basic_string<E, T> convert(basic_ostream<E, T> &os, const string &str) {
basic_string<E, T> buf;
for (unsigned int i = 0; i < str.size(); i++)
buf.push_back(os.widen(str[i]));
return buf;
}
class Hoge {
int x_;
int y_;
public:
Hoge(int x, int y) : x_(x), y_(y) {}
template<typename E, typename T> friend
basic_ostream<E, T>& operator<<(basic_ostream<E, T> &os, const Hoge &hoge) {
os << convert(os, X座標:)
<< hoge.x_
<< convert(os, , Y座標:)
<< hoge.y_;
return os;
}
};
これでどうでしょ?
convertは、もっと良い名前にして他のクラスでも使えるし、我慢の範囲内かなーと。
うーん...たとえば漢を二度にわけて(charふたつ)widenしてるわけで、
これでちゃんとwideになるのか、がヒジョーに気になります。
# うまくいったとしても、endianとか絡んでこないかな?
先ほどのコードはマルチバイトでもユニコードでも、失敗しませんでしたが、
そう考えてみると、ちゃんとwideになる方が不思議な気もしますね。
> 皆さんテンプレートで盛り上がっていますが、やはりレベルが高すぎて
> 意味不明です。参考にさせてもらいます。
乗っ取り申し訳ないです。私の程度などは見ての通り、
このスレの他の回答者に全然かなわないのですが、
お詫びを兼ね、かなわないなりに追加。
> 皆さんはどこで知識を得たのですか!?一番の疑問です。
CとC++とMFCとWinAPIの混沌の中で、周囲に聞く人もない中でもがきました。
それ以前にもプログラミングの経験はありましたが、上述の言語等は初めて。
C++だけでも書籍・サイト共に色々参考にしましたが、
お薦めのサイトは「ロベールのC++教室」です。
http://www7b.biglobe.ne.jp/~robe/cpphtml/index.html
書籍では先ほどから机の上に「C++の設計と進化」がのっています。
中盤以降は部分的にしか読めていないのですが。
http://www.amazon.co.jp/dp/4797328541