如果我有一个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.
每隔60秒
whichClass
变量就会自动更改,例如在另一个线程中。 最佳答案
您不能使用字符串来执行此操作,但这正是指针可以执行的操作:
myClass *whichClass = &class1;
whichClass->result();
但是,如果您打算从多个线程访问
whichClass
,则必须同步对其的访问。您可以通过互斥量保护它,也可以通过使其成为原子来做到这一点。这是后者的示例:std::atomic<myClass*> whichClass{&class1};
whichClass = &class2;
whichClass.load()->result();
请注意,这仅保护指针本身(即在一个线程中设置它并在另一个线程中取消引用是安全的)。它指向的对象没有受到保护(即,在多个线程中通过它调用
result
通常是不安全的)。