4

ストラテジーパターンを実装した後、インターフェイスタイプの配列を作成し、それに任意の具象タイプを追加できるようにしたいと思いました。

戦略パターンがわからない場合:http: //en.wikipedia.org/wiki/Strategy_pattern この特定の例では、StrategyInterface配列を作成し、具体的なタイプのA、B、およびCで埋めることができます。 。しかし、これは抽象クラスなので、私はそれを成し遂げることができません。これを行う方法はありますか、それとも抽象メソッドを削除せずに完全に不可能ですか?

4

4 に答える 4

6

配列にインターフェイスタイプへのポインタを格納させます。

typedef std::vector<Interface *> Array;
Array myArray;
myArray.push_back(new A());

さらに、メモリを管理するptr_vectorを使用できます。

typedef boost::ptr_vector<Interface> Array;
// the rest is the same
于 2008-10-05T07:03:31.653 に答える
2

オブジェクトではなくポインタを保存する.....オブジェクトを保存する場合は、boost::shared_ptrを使用します。

于 2008-10-05T06:59:38.400 に答える
1

errr、たとえば... std :: vector <boost :: shared_ptr <AbstractStrategy>>

于 2008-10-05T07:04:26.537 に答える
1

ブーストを使ってみませんか?

これがどのように見えるかの例です

#include <list>
#include <boost/any.hpp>

using boost::any_cast;
typedef std::list<boost::any> many;

void append_int(many & values, int value)
{
   boost::any to_append = value;
   values.push_back(to_append);
}

void append_string(many & values, const std::string & value)
{
   values.push_back(value);
}

void append_char_ptr(many & values, const char * value)
{
   values.push_back(value);
}

void append_any(many & values, const boost::any & value)
{
   values.push_back(value);
}

void append_nothing(many & values)
{
   values.push_back(boost::any());
}

素晴らしくエレガントなようです。さらに、十分にテストされたコードを取得し、値をポインターではなくオブジェクトとして扱うことができます

注:これらの関数名は参考情報ですが、オーバーライドを使用して単一のインターフェースを使用することもできます。

于 2008-10-05T08:19:29.147 に答える