次のデータ構造があるとします。
struct Base
{
Base(const int id, const std::string &name, const std::string &category):
id(id), name(name), category(category) {}
int id;
std::string name;
std::string category;
};
struct A : public Base
{
A(const int id, const std::string &name, const std::string &category,
const int x, const int y) :
Base(id, name, category), x(x), y(y) {}
int x, y;
};
ID、名前、およびカテゴリが関数で認識されている派生クラスのベクトルを返す単一のファクトリ メソッドを作成したいと考えています。私が遭遇する問題はスライスです...
std::vector< Base* > getVector(...)
構造体 A のデータ メンバーが失われました。(dynamic_cast を A に戻して、製品コードで受け入れられるようにしますか?)
だから私はこのテンプレートメソッドを持っていますが、それでも最善の解決策だとは思いません:
template< class T >
std::vector< T > getVector()
{
std::vector< T > retVal;
retVal.push_back(T(45, "The Matrix", "Science Fiction"));
retVal.push_back(T(45, "Good Luck Chuck", "Comedy"));
...
return retVal;
}
テンプレート法以外に良い解決策はありますか?