调用方法时可以设置类实例吗?

Esk*_*ski 3 c++ class

如果我有一个类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秒。

Rei*_*ica 5

您不能使用字符串来执行此操作,但这正是指针可以执行的操作:

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,在多个线程中对其进行调用通常是不安全的)。