从另一个类访问类的变量而不使第一类变为静态
问题描述:
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.有没有解决方法?从另一个类访问类的变量而不使第一类变为静态
这些函数在线程中运行以保持并行性。另一种方法是传递函数参数,但我试图避免它。
答
如何不使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]) {}
};
你的'A类'不是静态的,而是'x'成员。你在问题中有答案。 – harper 2014-12-19 11:56:40
请您发布*代码*。关键字'Class'不存在。 – harper 2014-12-19 11:58:51
'\\ size是1'是什么意思?顺便说一句:这是无效的C++语法。这个“东西”来自哪里? – Wolf 2014-12-19 12:12:46