2011-11-09 17 views
0

データの一部としてリンクされたリストを含むオブジェクトがあります。参考のために、このオブジェクトをLLと呼ぶことにしましょう。オブジェクトの「操作」

LLのインスタンスに「演算子」と呼ぶものを適用したいと考えています。したがって、オペレータは、例えば、LLのリンクされたリストの2つの要素を入れ替える。

通常、LLのメソッドなどの演算子を使用することがあります(つまり、LL.swap()などと呼びます)が、新しいタイプの演算子を定義できるようにしたいと考えています。

明白なことは、作ったときにLLオブジェクトへのポインタを受け入れるオブジェクトの "Operator"クラスを定義することです。その後、スワップを実行するOperator.go()に電話することができます。

しかし、これはちょうど私には正しいとは思われません(あいまいな理由から私は明確に表現することができません)。

他の顕著な事実は、次のとおりです。

  1. を私は(ので、おそらくオーバーヘッドを可能な限り低くなければならない)の順序でこれらの操作の多くを実行することになるでしょう。
  2. 通常、インスタンス化されるLLオブジェクトは少数しかありません。

「オペレータ」クラスを使用する方法を定義していますか?それがそうでなければならないと思うのは夢中ですか?問題は、「別のもの」が何であるかを想像するのが難しい。私はしばらくプログラミングをやっていないし、私の脳を再調整するのが遅い。

+0

C++キーワード(大文字と小文字を区別)のような名前を付けることは、IMOは非常に悪い考えです。 STLが何であるか、どのファンクタが何で、 'std :: transform'が提供するものなのか分かりますか? – Benoit

+0

フリーな機能が一般的なアプローチです。最大の汎用性のためにテンプレート化することもできます。欠点は、クラスのパブリックインターフェイスのみを使用できることです。 –

+0

オペレータクラスに特別なメソッドを使用する代わりに、 'operator()'メソッドをオーバーロードするだけですか? –

答えて

1

ここでは、visitor-patternと呼ばれるものを考えています。オブジェクトにビヘイビアを追加するには、適切かつ柔軟な方法です。

+0

... "良い"と "柔軟性"が非常に相対的なものです:-) Alexandrescuは、訪問者のパターンはひどく醜いと言いますが、時には適切なツールになることもあります。コードの性質ベース。一般に、クラス階層が非常に安定していて、新しい振る舞いをたくさん追加したいときには適切です。 –

+0

これはまさに私が望むものかもしれません(@ KerrekSBのコメントを考慮に入れても)。 –

関連する問題