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 :(得分: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或其他修饰符
答案 1 :(得分:0)
如果static不是一个选项,并且你必须通过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]) {}
};