■30882 / ) |
Re[3]: ADL ってどこまで効くの? |
□投稿者/ uskz (5回)-(2009/01/08(Thu) 15:37:39)
|
■No30873 (774RR さん) に返信
> Q1. > 「俺は c.push_back(make_pair("a", "b")); と書きたいんぢゃあ!」 > というわがままな要件にどう対応すればいいでしょう? (wcout 時に L"a" に直すのは手でやるとして) > struct value_type : std::pair<std::string, std::string> { > value_type(const std::pair<std::string, std::string>& a) : std::pair<std::string, std::string>(a) {} > }; > としたのでは c.push_back(make_pair(string("a"), string("b"))); としなけりゃなりません。
必要なconstructorやobject generatorも用意したstd::pairもどきを適当な名前空間に作って使うくらいしか思いつきません(あるいはすでにあるBoost.FusionやTuple辺りを使う).
> Q2. (まあ Q1 と状況は同じなのですが) > typedef std::pair<...> value_type; が変更できない場合、オレオレ operator<< をどう実装すべきでしょう? > ないしは、実装できるのでしょうか?できないのでしょうか?
std名前空間にオーバーロードを追加するのがスマートだと思いますが,規格はそれを許していないのでstd::pairを直接使う限りは難しいように思います.
|
|