我正在使用 C++11。我不允许使用像 boost 等外部库。我只能使用 STL。
我有很多事件,必须将其标识为字符串常量。我不允许使用枚举或整数或任何其他数据类型。例如:
然后,我有一些需要使用这些字符串的类,但不知道其他类是否存在(它们之间没有任何关系)。
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
}
}
所有这些事件都是常量,用于识别正在发生的事情。
这是我尝试过的:
How to store string constants that will be accessed by a number of different classes?
那里的一些人建议我提供如何解决具体问题的具体细节,所以我创建了这个新问题。
如何将字符串存储在一个公共(public)文件中,以便使用这些字符串的所有其他类都可以引用同一个文件?
最佳答案
最简单的方法是使用 char const*
常量,因为它更易于优化并且不使用动态分配。
您也可以在 std::string_view
函数中使用 postEvent
,避免动态分配。此步骤是可选的。如果您无法拥有字符串 View 但仍想避免动态分配,请引用您的实现的 SSO 最大容量并将事件名称保持在该大小以下。
还要考虑 nonstd::string_view
可以作为 C++11 库提供,并且很可能是您需要的抽象。诸如 cpp17_headers
和 string-view-lite
之类的库仅用于此目的。
它看起来像这样:
constexpr auto event_name1 = "event_name1";
在作为静态成员的类中,它的工作方式相同:
struct Type {
static constexpr auto event_name1 = "event_name1";
};
这最多会占用可执行文件的只读静态数据中的空间。
关于c++ - 如何在运行时以最小的开销共享全局常量?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55498738/