如果我有一个myClass类,并且有它的两个实例class1class2,但是又设置了我想在哪个时间使用哪个实例,我可以吗?

因此,例如:

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通常是不安全的)。

07-27 13:49