我希望标题不会太混乱。我拥有的是一个类StorageManager
,其中包含从Storage
. 这是一个例子。
struct Storage {}; // abstract
class StorageManager
{
private:
map<string, unique_ptr<Storage>> List; // store all types of storage
public:
template <typename T>
void Add(string Name) // add new storage with name
{
List.insert(make_pair(Name, unique_ptr<Storage>(new T())));
}
Storage* Get(string Name) // get storage by name
{
return List[Name].get();
}
};
SayPosition
是一种特殊的存储类型。
struct Position : public Storage
{
int X;
int Y;
};
感谢我上一个问题的出色答案,该Add
功能已经有效。我要改进的是Get
功能。它合理地返回一个Storage*
我可以使用的指针,如下所示。
int main()
{
StorageManager Manager;
Manager.Add<Position>("pos"); // add a new storage of type position
auto Strge = Manager.Get("pos"); // get pointer to base class storage
auto Pstn = (Position*)Strge; // convert pointer to derived class position
Pstn->X = 5;
Pstn->Y = 42;
}
有没有办法通过自动返回指向派生类的指针来摆脱这种指针转换?也许使用模板?