文字列を格納し、演算子を持つクラスがあるため、where Directory
is aとis aは、次のように、に格納されている文字列にandを追加します。/
a / b
a
Directory
b
std::string
"/"
b
a
Directory a("/home/joe/foo");
Directory b = a / "bar";
これによりb
、文字列が格納されます/home/joe/foo/bar
。これは実際に使用可能ですか、それとも不必要な空想ですか?
文字列を格納し、演算子を持つクラスがあるため、where Directory
is aとis aは、次のように、に格納されている文字列にandを追加します。/
a / b
a
Directory
b
std::string
"/"
b
a
Directory a("/home/joe/foo");
Directory b = a / "bar";
これによりb
、文字列が格納されます/home/joe/foo/bar
。これは実際に使用可能ですか、それとも不必要な空想ですか?
Boost Filesystem は同様の方法で operator/ をオーバーロードしています。先に進む前に、boost ファイルシステムをチェックアウトしましたか? http://www.boost.org/doc/libs/1_53_0/libs/filesystem/doc/index.htm
/ 演算子の一般的な意味を変更しているため、これは悪い考えです。
このスタイルで演算子をオーバーロードするのは... 奇妙です。operator/
それがひどいとか悪いとか言うつもりはありませんが、ほとんどの場合、「これをあれで割る」と言っているようなものだということを覚えておく必要があります. これで、演算子を好きなようにオーバーロードできますが、文字列 (ディレクトリを表すことができる) の規則では、通常、+
代わりに次のようなものをオーバーロードします。
このコードに最初に出会ったとき、ディレクトリを別のもので分割しようとしているような奇妙な感じがしました。そして、それは本当に紛らわしく、あまり明確ではありません. のような明示的なメソッド名を使用するか、または+
のような明示的なメソッド名を使用することをお勧めします。Append
Combine
常識が通用しないので仕方ないと思います。本では、演算子のオーバーロードのルールを提供しています: 組み込みの意味を持つ演算子をオーバーロードしないでください