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

问题描述:

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类队列而不将其设为静态?没有把它变成静态的,我会得到size = 0.有没有解决方法?从另一个类访问类的变量而不使第一类变为静态

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

+0

你的'A类'不是静态的,而是'x'成员。你在问题中有答案。 – harper 2014-12-19 11:56:40

+1

请您发布*代码*。关键字'Class'不存在。 – harper 2014-12-19 11:58:51

+1

'\\ size是1'是什么意思?顺便说一句:这是无效的C++语法。这个“东西”来自哪里? – Wolf 2014-12-19 12:12:46

如何不使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是可能的。您也可以尝试填充一个映射,其中键以某种方式从该类型派生而每个类型的单个实例是该值。

的两个例子包括原始如下所示:online example

简而言之:

初始化类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]) {} 
};