【发布时间】:2022-01-18 23:11:08
【问题描述】:
我用 C++ 编写了一个 ResourceManager 类,其中包含一个 std::map<std::string, Resource>。然后,我当前的代码使用字符串文字访问这些方法,例如:
// ResourceManager.h
class ResourceManager {
private:
std::map<std::string, Resource>
public:
void loadResource(std::string_view resourceName, std::string_view fileName);
const Resource& getResource(std::string_view resourceName) const;
}
// a.cpp
resourceManager.loadResource("background image", "background_image.png")
// b.cpp
resourceManager.getResource("background image")
这会是个问题吗?我应该用constants.h 文件中定义的常量替换所有这些字符串文字吗?在这种情况下,我应该只使用enum 作为地图的键吗?
【问题讨论】:
-
这更像是一个最佳实践问题。对于它的价值,是的,要么使用枚举,要么使用常量 vbl
-
像往常一样,这取决于。使用字符串文字会导致拼写错误。另一方面,拥有一个全局枚举将使您在添加新枚举值时重新编译所有内容。
-
我看到的使用字符串文字的主要问题是你在重复信息。这引入了不必要的错误来源。请参阅Don't Repeat Yourself(DRY 负责人)。
-
总是字符串文字吗?也许你可以使用这样的编译时间图:github.com/serge-sans-paille/frozen
标签: c++ stdmap stdstring string-literals