저는 (OpenGL 그래픽 엔진 인) C++ (C++ 11) 라이브러리를 가지고 있습니다.이벤트 수신기 등록에 사용할 저장소 포인터
제 질문은 이벤트 수신기를 등록하기위한 좋은 프로그래밍 기술을 중심으로 이루어졌습니다.
그래서 같은 수준의 관계를 가지고
Program
--has ->SceneManager
--has ->ShaderManager
--has -> * Shader
Shader
클래스는 다른 객체를 등록 할 수 있습니다 자체는 ShaderBindListener
으로, 이는 쉐이더가 호출 될 때마다 bind()
메서드가 호출 됨으로써 모든 청취자에게 알린다는 것을 의미합니다.
ShaderManager
클래스는 외부 라이브러리가 액세스 할 수 있고 새로운 Shader
개체를 만들 수있는 클래스입니다.
는 지금, 나는 각 Shader
객체가 Shader
가 결합 될 때 Program
객체가 통지와 GPU에 Shader
에 등, 행렬 데이터를 전달할 수 있도록하는 ShaderBindListener
로 Program
객체를 갖고 싶어.
내 초기 해결책은 에 대한 포인터를 전달하는 SceneManager
에 대한 포인터를 Program
개체가 자신에게 전달하도록하는 것이 었습니다. 새로운 Shader
이 생성 될 때마다 ShaderManager
은 Program
을 수신기로 추가합니다.
이것은 잘 작동하지만 디자인에있어 약간 잘못된 것 같습니다.
어쩌면 나는 현학적 일뿐입니다. 그러나 이것은 여러분에게 좋은 디자인처럼 보입니까?
감사합니다. @anthony. Boost Signals에 대해 들어 본 적이 없으므로 확인해 보겠습니다. 나는 원래 싱글 톤 객체를 사용하고 있었지만, 최근에 그들이 모든 악의 산란에 대해 준비해 왔기 때문에, 나는 그것들을 리팩터링하려고 노력해 왔습니다. – Jarrett