如何在没有全局变量的情况下共享这些数据
How to share this data without global vars
我正在尝试找出最符合逻辑,安全,有效的方法来完成这一点,而不使用全局变量。
假设我有一个类:
class SomeClass{
public: someFunction(){...}
};
另一个类实例化SomeClass
作为数据成员:
class AnotherClass{
SomeClass theTest;
void anotherFunction(){...}
int myDataInt;
};
现在,我希望SomeClass
中的someFunction
能够轻松访问AnotherClass
中的myDataInt
。一种方法是将int
参数添加到AnotherClass
传入的someFunction
中。也许这是唯一体面的方式。但我希望someFunction
和myDataInt
之间有一个更"自动"的访问。另一种选择是简单地让AnotherClass
在SomeClass
中设置与自己的myDataInt
相等的数据。但是我有两个类存储相同的数据,这似乎是多余的。
还有其他建议吗?感谢。
在SomeClass
中添加一个指向AnotherClass
的指针:
class SomeClass{
AnotherClass* enclosing;
public:
someFunction(){
int x=enclosing->myDataInt;
...
}
};
编辑:另外,正如上面提到的,您将希望SomeClass
成为AnotherClass
的朋友,或者为myDataInt
提供一个访问器方法。
类应该对自己的状态负责,因此您希望每个类成员都是私有的,并提供接口(成员方法)来访问它们。
如果AnotherClass和SomeClass之间只共享几个字段,我就不会那么容易地介绍friend
。一个更好的设计总是试图将数据隐藏在外部。
我对你的问题的解决方案是SomeClass持有一个指向另一个类的指针,然后访问它的成员方法,如果需要:
class AnotherClass;
class SomeClass
{
public:
SomeClass(AnotherClass* p) : context_ptr_(p) {}
void someFunction();
{
context_ptr_->setDataInt(3);
}
private:
AnotherClass *context_ptr_;
};
class AnotherClass
{
public:
AnotherClass() :theTest(this)
{
}
void anotherFunction(){ }
void setDataInt(int i) { myDataInt = i; }
private:
SomeClass theTest;
int myDataInt;
};
你可以这样做:
class SomeClass{
public:
SomeClass( int & refInt )
: sharedInt(refInt)
{}
int & sharedInt;
};
在AnotherClass
中:
class AnotherClass {
public:
AnotherClass()
: theTest(myDataInt)
{}
private:
SomeClass theTest;
int myDataInt;
};
相关文章:
- C++:在不中断共享的情况下通过引用传递共享 PTR?
- 在什么情况下,需要共享智能指针而无法使用唯一指针?
- 如何在多写入器情况下对文件支持的共享内存中的大页面出错
- 在这种特殊情况下,我是否需要在共享内存中使用原子类型
- 在没有共享 COM 对象的情况下使用 COM STA 或 MTA?
- 如何在不更改现有函数语法的情况下将普通指针替换为共享指针
- 在使用 boost 共享互斥体时,我应该在什么情况下使用 owns_lock() 函数
- 在不违反严格的别名规则的情况下访问进程间共享内存中的对象
- 一种在没有 root 的情况下加载共享库的更简单方法
- C 共享_ptr使用情况下是否会有任何泄漏
- 关于在这种情况下消息队列与共享内存的适用性或适用性
- RAII 是否可以在不同步的情况下有效地在线程之间共享不可变对象
- 在不增加引用计数的情况下迭代共享指针的映射
- 是否可以使用 std::shared_ptr 创建共享对象池,并在没有自定义析构函数的情况下创建weak_ptr
- 如何*首先*获得独占锁,然后在不释放锁的情况下降级为共享锁
- 这是存储 std::分配器状态的正确方法 - 在这种情况下,由 Windows 上的共享内存支持
- 在不释放内存的情况下调用共享库
- C++:在共享所有权的情况下,C++11移动语义可以避免指针吗
- 共享指针在未分配的情况下工作
- 在GCC中,如何在不导出所有符号的情况下导出共享库的所有typeinfo符号