如果我有一个类myClass,我有它的两个实例,class1并且class2,但是再设置我想此时使用哪个实例,我将能够?
因此,例如:
if (whichClass == 1) {
class1.result();
} else if (whichClass == 2) {
class2.result();
}
Run Code Online (Sandbox Code Playgroud)
这是我可以做到的一种方式,但是我想避免使用if语句,因此我想按照
string whichClass = "class1"; //global
Run Code Online (Sandbox Code Playgroud)
然后在其他地方
whichClass.result(); //this depends on what whichClass is at any particular time.
Run Code Online (Sandbox Code Playgroud)
其中whichClass变量被改变自身,例如,在另一个线程,每60秒。
您不能使用字符串来执行此操作,但这正是指针可以执行的操作:
myClass *whichClass = &class1;
whichClass->result();
Run Code Online (Sandbox Code Playgroud)
但是,如果打算whichClass从多个线程进行访问,则必须同步对其的访问。您可以通过互斥量保护它,也可以通过使其成为原子来做到这一点。这是后者的一个示例:
std::atomic<myClass*> whichClass{&class1};
whichClass = &class2;
whichClass.load()->result();
Run Code Online (Sandbox Code Playgroud)
请注意,这仅保护指针本身(即,将其设置在一个线程中并在另一个线程中取消引用是安全的)。它指向的对象没有受到保护(即result,在多个线程中对其进行调用通常是不安全的)。