우리는 event 클래스를 선언 한 클래스에서만 호출 할 수있는 특별한 종류의 델리게이트 인 event 키워드를 사용합니다. 그래서 boost :: signals2를 사용하여 네이티브 C++에서이 작업을 수행하는 방법이 있습니까? 그렇다면 성능면에서 비싸지 않습니까?C++ boost signals 2
2
A
답변
3
일반적으로 C++ 함수의 호출 기능을 제한하는 접근법은 해당 클래스 외부에서 인스턴스화 할 수없는 유형의 더미 매개 변수 (의도 한 클래스에 대해 'friend'선언이있는 개인 팩토리 또는 생성자)를 전달하는 데 의존합니다.
boost :: signals2 :: 신호에 적용하면 관계없는 매개 변수가있는 신호 정의가됩니다.
정말로 호출 할 수 없도록 설정해야하는 경우 개체 구성원 일뿐입니다 (적어도 내가 사용하는 것처럼 ...).이 멤버를 개인 또는 보호 된 멤버로 선언하고 공용으로 제공 할 수 있습니다 함수를 사용하여 연결합니다.
class FooEmitter
{
public:
boost::signals2::scoped_connection ConnectToFoo(boost::function<void (Emitter&)>& handler)
{
return fooSignal.connect(handler);
}
void triggerFoo() {
fooSignal(*this);
}
private:
boost::signals2::signal<void (Emitter&)> fooSignal;
};
class FooHandler
{
public:
FooHandler()
{
fooConnection = getAnEmitter().ConnectToFoo(boost::bind(&FooHandler::HandleFoo, this, _1);
}
void HandleFoo(Emitter&)
{
// handler body
}
private:
boost::signals2::scoped_connection fooConnection;
}
당신은 물론 당신의 모델이 충분히 견고 경우 FooHandler &을하고 거기에 바인딩을 수행 할 ConnectToFoo 방법을 재 배열 할 수있다.
더미면은 좋은 컴파일러를 사용하는 것이 효과적이며이 메커니즘은 추가적인 함수 호출이거나 핸들러 당 두 번 (신호 당)이 아닙니다.
관련 문제
- 1. Django Signals for Rails와 동일합니까?
- 2. C++/boost :
- 3. Intellisense는 boost :: boost :: boost :: boost :: boost :: boost :: classname을 보여줍니다. 왜?
- 4. c/C++ boost - 문제 컴파일
- 5. C++ Boost on iPhone
- 6. C++ boost function issue
- 7. C++ boost mpl vector
- 8. C++ boost lambda libraries
- 9. Django 등록 ImportError : No modules named signals
- 10. C++ 질문 : boost :: bind 다른 boost :: bind를 받으십시오.
- 11. C++ Boost ASIO 간단한주기 타이머?
- 12. 피닉스에서 C++ boost :: lambda :: ret
- 13. C++ boost :: thread operator()() 질문
- 14. Help with C++ Boost :: regex
- 15. Objective-C++에서 boost :: shared_ptr
- 16. C++ Boost Concepts Deprecation 경고
- 17. 차단을위한 C++ boost asio timeout 연결
- 18. 이 Boost C++ 코드를 사용하려고하는데 문제가 있습니다.
- 19. boost :: except와 boost :: variant의 문제
- 20. boost :: lock_guard vs boost :: mutex :: scoped_lock
- 21. Dev C++ 및 Boost :: regex와의 링크 문제
- 22. 커스텀 C++ boost :: lambda 표현식 도움말
- 23. boost :: vector_property_map에 boost :: property_map 복사
- 24. boost :: signal as boost :: function
- 25. boost :: gil :: color_converted_view with boost :: gil :: for_each_pixel
- 26. regex : boost :: xpressive vs boost :: regex
- 27. 2 차원 배열에서 boost :: multi_array - 컴파일 할 수 없습니다.
- 28. shared_ptr 및 boost :: transform_iterator의 boost :: bimap
- 29. C++ 프로젝트에 boost :: thread를 포함시키는 방법은 무엇입니까?
- 30. 리눅스에서 C++로 Boost/NTL 프로그램 컴파일하기