假设我有以下数据结构:
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;
}
除了模板方法,还有更好的解决方案吗?