从另一个类访问类的变量而不使第一类为静态

accessing class's variable from another class without making first class static

本文关键字:静态 一类 访问 另一个 变量      更新时间:2023-10-16
class A{
    static queue x;
    void operateOnQueue()
    {
        x.push(something);
    }
} 
class B{
    void getOtherClassQueueSize()
    {
        A *a= new A();
        cout<<a->x.size()<<endl; \ size of queue is 1
        // OR alternatively
        cout<<A::x.size()<<endl;
        delete(a);
    }
}

如何在 getOtherClassQueueSize(( 中访问类 B 中的同一类 A 队列而不使其静态?如果不使其静态,我将得到大小 = 0。有什么解决方法吗?

这些函数在线程中运行以保持并行性。另一种方法是传入函数参数,但我试图避免它。

不让 x 静态怎么样?然后,如果它是公开的,您可以通过以下指针直接访问它:

//assume 'a' points to an object who's stack has already been filled somewhere else, then:
cout << a->x.size(); //prints the size of member 'x' of 'a'

或者您可以将其设为私有并公开 getter/setter 或其他修饰符

如果静态不是一个选项,并且您必须通过 A 实例访问队列,则可以使用引用或指向队列单个实例的指针初始化类 A 的 obj。您还可以尝试填充一个映射,其中键以某种方式派生自类型,并且每个类型的单个实例是值。

包括您的原件在内的两个示例如下所示: 在线示例

总之:

使用引用或指向队列单个实例的指针初始化类 A 的 obj:

std::deque<int> global_x;
struct Anew{
   std::deque<int>& x;
   Anew() : x(global_x) {}
};

填充一个映射,其中键以某种方式派生自类型,每个类型的单个实例是值:

std::map<int, std::deque<int> > mapxs;
struct Anew2{
   enum { type_as_int_so_no_rtti_is_needed = 1 };
   std::deque<int>& x;
   Anew2() : x(mapxs[type_as_int_so_no_rtti_is_needed]) {}
};