从另一个类访问类的变量而不使第一类为静态
accessing class's variable from another class without making first class static
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]) {}
};
相关文章:
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- #为""定义宏;静态";针对不同的上下文
- cmake如何在fedora工作站中找到boost静态库包
- 静态数据成员的问题-修复链接错误会导致编译器错误
- 将公共但非静态的成员函数与ALGLIB集成
- cmake在我的项目中所需的所有静态库都不成功
- C++从另一个类访问公共静态向量的正确方法是什么
- 基于boost的程序的静态链接——zlib问题
- 在静态库中嵌入类方法
- Qt C++静态thread_local QNetworkAccessManager是线程应用程序的好选择吗
- 如何在C++中获得"静态纯虚拟"功能?
- 私有类型的静态常量成员
- 如何使用nullptr初始化同一类对象的静态指针数组?
- 希望静态成员函数调用同一类的成员变量
- 如何在另一类设置静态变量
- 同一类中类的静态成员对象
- 从同一类的专门化模板的静态函数访问类模板成员
- 静态方法可以访问同一类的私有方法吗?
- 在同一类的方法中使用类的静态成员变量
- 如何在具有 2 个实现的同一类中保留静态变量的值