通用地图对象
Generic map objects
我正在尝试用 C++ 为 SFML 创建一个资产管理器(很像 Libgdx 库中提供的那个)。但我 运行 陷入了模板是 C++ 中最糟糕的部分之一的古老问题。
我正在尝试让一个地图对象包含泛型类型,键可以是一个简单的字符串,数据可以是我想要的任何类型。请注意,我不想将地图对象模板化为在整个地图中简单地保存一个通用类型(IE,地图为 <string, int>
)。我想在同一张地图中有不同的类型,这样我就可以加载许多不同的资产。
有什么办法可以做这样的事情吗?
感谢您的帮助和考虑,任何小提示都会大有帮助。
我重申我关于使用经理地图进行重新设计的评论。
那么你可以有例如
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");
也许不完全像这样,但希望你明白了。
您可以定义一个结构,或者在某些情况下可以使用联合作为映射的第二个参数传递。可能不是最优雅的解决方案,但可以完成工作。
我正在尝试用 C++ 为 SFML 创建一个资产管理器(很像 Libgdx 库中提供的那个)。但我 运行 陷入了模板是 C++ 中最糟糕的部分之一的古老问题。
我正在尝试让一个地图对象包含泛型类型,键可以是一个简单的字符串,数据可以是我想要的任何类型。请注意,我不想将地图对象模板化为在整个地图中简单地保存一个通用类型(IE,地图为 <string, int>
)。我想在同一张地图中有不同的类型,这样我就可以加载许多不同的资产。
有什么办法可以做这样的事情吗?
感谢您的帮助和考虑,任何小提示都会大有帮助。
我重申我关于使用经理地图进行重新设计的评论。
那么你可以有例如
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");
也许不完全像这样,但希望你明白了。
您可以定义一个结构,或者在某些情况下可以使用联合作为映射的第二个参数传递。可能不是最优雅的解决方案,但可以完成工作。