通用地图对象 我试图创建一个资产管理器,就像在LGBGX库中为C++中的SFML提供的一个。但是我遇到了一个古老的问题:模板是C++最坏的部分之一。

通用地图对象 我试图创建一个资产管理器,就像在LGBGX库中为C++中的SFML提供的一个。但是我遇到了一个古老的问题:模板是C++最坏的部分之一。,c++,sfml,asset-management,C++,Sfml,Asset Management,我试图让map对象包含泛型类型,键是一个简单的字符串,数据是我想要的任何类型。注意,我不想模板化map对象,使其仅在整个map IE中保存一个泛型类型,即映射为。我希望在同一个映射中有不同的类型,以便可以加载许多不同的资源 我有办法做这样的事吗 感谢您的帮助和考虑,任何小建议都会大有帮助。我重申我对使用经理地图进行重新设计的意见 那你就可以了 class basic_asset_manager { ... }; class image_asset_manager : public basic_a

我试图让map对象包含泛型类型,键是一个简单的字符串,数据是我想要的任何类型。注意,我不想模板化map对象,使其仅在整个map IE中保存一个泛型类型,即映射为。我希望在同一个映射中有不同的类型,以便可以加载许多不同的资源

我有办法做这样的事吗


感谢您的帮助和考虑,任何小建议都会大有帮助。

我重申我对使用经理地图进行重新设计的意见

那你就可以了

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");

可能不完全像这样,但希望您能理解这一点。

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

当然有,或者使用继承和指针。但是你也可以重新考虑你的设计,让你拥有一个资产管理器来处理所有的资产,而不是使用一个管理者来管理每一种资产,而是有一个管理者的地图。模板是C++的最好部分之一。至于你的问题,你可能想看看谢谢!我将在今晚晚些时候查看它,我想我的模板注释写错了。我想说的是,在我看来,大多数朋友的意见是,C++中的模板是最麻烦和最令人困惑的特性之一,虽然它们非常有用。难道你不能仅仅使用继承吗?也就是说,从一个基本类资产派生出你的所有资产,然后你的地图就可以像map@Brad不,我不能使用继承,这是因为我使用的是SFML库,它有自己的自定义资产类。因为我想加载所有不同类型的资产。SFML音频和图像资产不共享父类,这非常令人沮丧。