可以说我有以下的数据结构:C++对象工厂函数
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(...)
struct 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;
}
难道还有比模板以外的任何更好的解决方案方法?
你的'std :: vector getVector(...)'如何展示切片?你的成员会有不同的派生类型吗? –
2013-02-18 22:39:06
您对问题的描述(“我遇到的问题是切片”)不完整。请发布一个**短**,**完整**程序来展示您的问题。请参阅http://sscce.org/。 – 2013-02-18 22:44:32
“Base *”与“A *”大小相同。指针不会被切分。 – 2013-02-18 22:48:51