c++ - 调用方法时可以设置类实例吗?
问题描述
如果我有一个类myClass
,并且我有它的两个实例,class1
并且class2
,然后设置我想在哪个时间使用哪个实例,我能做到吗?
例如:
if (whichClass == 1) {
class1.result();
} else if (whichClass == 2) {
class2.result();
}
是我可以做到的一种方式,但我想避免使用 if 语句,所以我想做一些类似的事情
string whichClass = "class1"; //global
然后在别的地方...
whichClass.result(); //this depends on what whichClass is at any particular time.
whichClass
变量自行更改的地方,例如在另一个线程中,每 60 秒一次。
解决方案
你不能用字符串来做到这一点,但它正是指针可以做的:
myClass *whichClass = &class1;
whichClass->result();
但是,如果您打算whichClass
从多个线程访问,则必须同步对它的访问。您可以通过互斥体保护它或使其成为原子来实现这一点。这是后者的一个例子:
std::atomic<myClass*> whichClass{&class1};
whichClass = &class2;
whichClass.load()->result();
请注意,这只保护指针本身(即在一个线程中设置它并在另一个线程中取消引用它是安全的)。它指向的对象不受保护(即result
在多个线程中调用它通常是不安全的)。
推荐阅读
- android - TensorFlow Lite 模型被逆向工程窃取
- python - 从数据框中删除指定的行
- visual-studio - 无法在 Visual Studio 连接对话框中连接 Sqlite
- python - 为什么我的简单 tkinter 计算器给我的结果毫无意义?
- terraform - for_each 循环中的引用计数资源
- python - 如何通过仅更改最后一行代码来使以下功能起作用?
- html - Django Crispy 表单在浏览器中返回缺失的标签
- dictionary - 在 Julia 中从 pandas.Series 复制 map()
- java - Java 控制器如何与 JSP 通信?
- javascript - 有没有办法在三元表达式的条件中返回值而不在 JavaScript 中重新指定它?