我正在使用 C++11。我不允许使用像 boost 等外部库。我必须只使用 STL。
我有许多事件,必须将其标识为字符串常量。我不允许使用枚举或整数或任何其他数据类型。例如:
“事件名称1”
“事件名称2”
“some_other_event_name3”
“a_ different_event_name12”
然后我有一些类需要使用这些字符串,但不知道其他类的存在(它们彼此没有任何关系)。
class Panel{
void postEvent(){
SomeSingleton::postEvent("event_name");
}
}
另一类::
class SomeClass{
SomeClass(){
SomeSingleton::listenForEvent("event_name");
}
void receiveEvent(){
//This function is triggered when "event_name" occurs.
//Do stuff
}
}
所有这些事件都是常量,用于识别正在发生的事情。
这是我尝试过的:
如何存储将被多个不同类访问的字符串常量?
那里的一些人建议我提供如何解决具体问题的具体细节,所以我创建了这个新问题。
如何将字符串存储在公共文件中,以便使用这些字符串的所有其他类都可以引用同一文件?
- 我不想在应用程序的生命周期内浪费内存或泄漏内存(它是一个移动应用程序)
- 编译时间对我来说不是什么大问题,因为项目不是很大
- 预计将有 50 场不同的活动。
- 将所有字符串保存在一个文件中,并在情况发生变化时仅编辑该文件似乎更易于维护。
- 任何类都可以随时监听任何事件,并且在编译之前我不会知道
最简单的方法是使用char const*
常量,因为它更可优化并且不使用动态分配。
您也可以使用std::string_view
in the postEvent
函数,避免动态分配。此步骤是可选的。如果您无法拥有字符串视图并且仍然希望避免动态分配,请参考您的实现的 SSO 最大容量并将事件名称保持在该大小以下。
还要考虑到nonstd::string_view
可以作为 C++11 库提供,并且很可能是您需要的抽象。图书馆如cpp17_headers and string-view-lite仅为该目的而存在。
它看起来像这样:
constexpr auto event_name1 = "event_name1";
在类中作为静态成员它的工作方式相同:
struct Type {
static constexpr auto event_name1 = "event_name1";
};
这最多会占用可执行文件的只读静态数据的空间。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)