说我有一个框架,其中包含一个jWorld
类,其中包含有关我的物理环境(重力等)的有用信息,我有一个jPhysicsObject
将使用此信息。每当我想对jPhysicsObject
进行相关更改时,jPhysicsObject
是否有任何方法可以访问jWorld
信息而不通过jWorld
?从另一个类访问类信息而不通过它
回答
尝试按引用传递(最好是const引用)。
另一个想法是实现一个全局实例,例如Singleton。
否则使用静态方法和静态数据成员。
是的,它传递一个时间作为基准(如果jWorld shoudn`t一个对象更改),或者作为一个指针jPhysicsObject的构造(出于安全原因,你可以使用的shared_ptr的指针)
另一种选择是使用Observable设计模式。你的jPhysicsObject将是一个观察者,而你的jWorld将是可以被浏览的。 jPhysicsObject将自己添加为jWorld的观察者。当jWorld中的某些内容发生变化时,jPhysicsObject将会收到通知。这样,如果您计划引入其他将侦听jWorld类中的更改的对象,您将拥有松散耦合的体系结构,这将会派上用场。
下面的代码片段,这将有助于你得到Observer模式开始:
//IObserver.hpp
#pragma once
#include <memory>
template <class T>
class IObserver
{
public:
virtual ~IObserver() {};
virtual void Notify(T data) = 0;
protected:
};
//Observable.hpp
#pragma once
#include "IObserver.hpp"
#include <list>
#include <string>
#include <memory>
template<class T>
class Observable
{
public:
void NotifyObservers(T data)
{
for (auto o : m_observers)
{
o.Notify(data);
}
}
void AddObserver(std::shared_ptr<IObserver<T>> &obs)
{
m_observers.push_back(obs);
}
void RemoveObserver(std::shared_ptr<IObserver<T>> &obs)
{
m_observers.remove(obs);
}
private:
std::list<std::shared_ptr<IObserver<T>>> m_observers;
};
恐怕现在对我来说有点过分了,但是感谢你给我注意了'#pragma once' - 我以前没有看到它。 – theStandard
@theStandard #pragma曾经确保只有一次在源文件中包含相同的头文件。这是微软的事。如果你不想使用它,你可以在“#ifndef H_FILE #define H_FILE #endif”块中获得头文件内容 – armanali
我知道它的作用。不幸的是,我被困在Linux上一段时间,所以这不是一个真正的问题,但我不介意普通的包括警卫。 – theStandard
只是有jPhysicsObject
的构造采取jWorld
对象为基准。然后在需要查询时进行查询。
class jWorld {
public:
jWorld();
};
class jPhysicsObject {
public:
jPhysicsObject(jWorld const & world): mWorld(world);
private:
jWorld const & mWorld;
};
int main() {
jWorld world;
jPhysicsObject object(world);
}
- 1. 从一个类到另一个类的Java访问信息
- 2. AS3 - 通过变量访问类信息
- 3. C#从另一个类访问变量而不重构类
- 4. 从另一个类的Java JTextField信息访问
- 5. 访问从另一个类
- 6. 从另一个viewController访问信息
- 7. 访问另一个类的从一个内部类不同类
- 8. 不能从另一个类访问form1
- 9. 从另一个类访问类
- 10. 从另一个类访问类变量
- 11. 如何从另一个类访问类和它的功能
- 12. 从另一个类访问一个NSMutableArray
- 13. Unity3d:通过GetComponent错误从另一个脚本访问类
- 14. 通过另一个类中的$ variable访问类?
- 15. 如何将信息从一个类传递到另一个类
- 16. 访问C#的单身人士,而不通过它进入类
- 17. 访问SQL:拉从另一个表除了组相关信息通过
- 18. 访问另一个类
- 19. 访问另一个类
- 20. 访问另一个类
- 21. 从另一个类Java访问数据
- 22. 从另一个类访问BindingList
- 23. 从另一个类访问TextView
- 24. 从另一个类访问变量objc
- 25. 从另一个类访问TableViewController
- 26. 访问标签从另一个类
- 27. 从另一个类访问DispatchGroup
- 28. 如何从另一个类访问notifyIcon
- 29. 从另一个类访问returnValue
- 30. 从另一个类访问int的iOS
静态成员和方法。绰号“世界”几乎意味着这一点。 – WhozCraig