2009-07-22 (水)
*名前の衝突
同じ名前空間にsplit関数があるのにsplitクラスを作ろうとして怒られた.関数名と同名のクラスを定義しても怒らないで欲しい.クラスもコンストラクタの型でオーバーロードして欲しい.
どうせ一時オブジェクトとしてしか生成されないクラスだったので,クラス名を変更して,元のクラス名と同名の関数を作ってコンストラクタ代わりに使えば,外から見れば何も問題ない.関数ならオーバーロードで同名のものがあっても大丈夫.
簡単に書くとこんなコード.split()関数は別のところにある.
class _split { public: std::string sep; _split(const std::string &s):sep(s){} }; std::vector<std::string> operator *(const std::string &s,_split &sp) { return split(sp.sep,s); } inline _split split(const std::string &s) { return _split(s); }
速度的な問題は気にしてない.
乗算演算子を関数の適用とみなすという怪しげなプログラミングスタイルが最近の個人的な流行.