在實現了策略模式後,我想創建一個接口類型的數組,然後我可以添加任何具體類型。C++策略設計模式,製作一個接口陣列
對於那些誰也不知道的策略模式: http://en.wikipedia.org/wiki/Strategy_pattern 在這個特殊的例子,我希望做一個StrategyInterface陣列,我可以再與具體類型的A,B和C.然而填補,因爲這是一個抽象類,我無法完成它。有沒有辦法做到這一點,或者完全不可能,沒有刪除抽象方法?
在實現了策略模式後,我想創建一個接口類型的數組,然後我可以添加任何具體類型。C++策略設計模式,製作一個接口陣列
對於那些誰也不知道的策略模式: http://en.wikipedia.org/wiki/Strategy_pattern 在這個特殊的例子,我希望做一個StrategyInterface陣列,我可以再與具體類型的A,B和C.然而填補,因爲這是一個抽象類,我無法完成它。有沒有辦法做到這一點,或者完全不可能,沒有刪除抽象方法?
存儲指針不是對象.....使用boost :: shared_ptr如果你想存儲對象。
使數組指針存儲接口類型:
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
errr,例如... STD: :矢量< boost :: shared_ptr < AbstractStrategy >>
你可以編輯自己的原始答案 - 只需點擊「編輯」鏈接 – 2008-10-05 07:06:19
優秀,這是很酷:) :) – 2008-10-05 07:07:35
使用boost有什麼用處?
下面是它會是什麼樣子
#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-05 21:15:54