C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


(過去ログ 55 を表示中)
■30873 / )  Re[2]: ADL ってどこまで効くの?
□投稿者/ 774RR (278回)-(2009/01/08(Thu) 15:06:53)
なるほど。最初の例で書いた typedef std::string value_type; の場合は確かに
オレオレ operator<< の template を丸ごと削除してもコンパイル通ってしまいました。
俺の知らないうちに ADL が std::operator を見つけてしまっていて、
オレオレ 無名名前空間::operator は使われていないのですな。

struct value_type : std::pair<....> {}; とすればいい、んぢゃね?も納得です。

*ですが*

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"))); としなけりゃなりません。

Q2. (まあ Q1 と状況は同じなのですが)
typedef std::pair<...> value_type; が変更できない場合、オレオレ operator<< をどう実装すべきでしょう?
ないしは、実装できるのでしょうか?できないのでしょうか?

返信 編集キー/


管理者用

- Child Tree -