通用地图对象

时间:2015-03-23 22:35:09

标签: c++ sfml asset-management

我正在尝试为C ++中的SFML创建一个Asset Manager(很像Libgdx库中提供的那个)。但我遇到了一个古老的模板问题,它是C ++中最糟糕的部分之一。

我试图让一个地图对象保持泛型类型,键是一个简单的字符串,数据将是我想要的任何类型。注意,我不想将地图对象模板化为在整个地图中简单地保存一个泛型类型(IE,地图为<string, int>)。我希望在同一个地图中有不同的类型,以便我可以加载许多不同的资产。

我有什么方法可以做这样的事情吗?

感谢您的帮助和考虑,任何小小的提示都有很长的路要走。

2 个答案:

答案 0 :(得分:0)

我重申了我对使用经理地图进行重新设计的评论。

那么你可以拥有例如。

class basic_asset_manager { ... };
class image_asset_manager : public basic_asset_manager { ... };
...

std::unordered_map<std::string, basic_asset_manager*> asset_managers;
asset_managers["image"] = new image_asset_manager;
...

// Load an image from a file
asset_managers["image"]->load("some alias for image", "/some/file/name");
...

// Get image
image = asset_manager["image"]->get("some alias for image");

可能不是完全这样,但你希望得到重点。

答案 1 :(得分:0)

您可以定义结构,或者在某些情况下可能使用union作为地图的第二个参数传递。可能不是最优雅的解决方案,但可以完成工作。