首页 > 解决方案 > 调用方法时可以设置类实例吗?

问题描述

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

标签: c++class

解决方案


你不能用字符串来做到这一点,但它正是指针可以做的:

myClass *whichClass = &class1;

whichClass->result();

但是,如果您打算whichClass从多个线程访问,则必须同步对它的访问。您可以通过互斥体保护它或使其成为原子来实现这一点。这是后者的一个例子:

std::atomic<myClass*> whichClass{&class1};

whichClass = &class2;

whichClass.load()->result();

请注意,这只保护指针本身(即在一个线程中设置它并在另一个线程中取消引用它是安全的)。它指向的对象不受保护(即result在多个线程中调用它通常是不安全的)。


推荐阅读