내가 부스트 라이브러리를 사용하고 내 질문에 대한 boost :: signals 있습니다.
여러 슬롯을 호출 할 수있는 신호가 있지만 슬롯 하나만이 통화와 일치하므로이 특정 슬롯이 true를 반환하고 통화가 중단되기를 원합니다.
가능합니까?
효율적인가요?
효율성이 떨어지면 나에게 더 나은 방법을 제안 해 줄 수 있습니까?부울 :: 신호 중 하나가 true를 반환하는 경우 해당 슬롯을 호출하는 것을 막을 수있는 방법이 있습니까?
답변
약간의 연구 끝에 나는 부스트 문서에서 그들이 Slots that return values에 대해 쓰는 것을 발견했습니다. 이제
struct breakIfTrue
{
template<typename InputIterator>
bool operator()(InputIterator first, InputIterator last) const
{
if (first == last)
return false;
while (first != last) {
if (*first)
return true;
++first;
}
}
};
boost::signal<bool(), breakIfTrue> sig;
왜 잘못된 일을 할 수 있는지 :
그들은이 같은 다른 결합기를 사용하는 것이 좋습니다?
+1 : 이것은 정답입니다. –
이 방법에 문제가 있습니까? –
사상가 결합 자들은 모두 그것들을 돌렸지 만, 문서를 조사 할 때 "Combiners는 특정 기준이 충족 될 때까지 일부 슬롯 만 호출 할 수있는 옵션이 있습니다." 그것을 감안할 때, 당신은 대답을 가지고있는 것처럼 들리 네! 하지만 이것은 boost 신호/슬롯 메커니즘의 고유 한 속성처럼 보일 것이며 Qt와 같은 다른 시스템에서 반드시 발견 할 수는 없다는 것을 지적 할 것입니다. – HostileFork
가능할 수도 있지만, 확실하게 신호 & 슬롯의 "일반 게시/구독"의도와 반대입니다.
당신이 정말로 찾고있는 것은 Chain of Responsibility 디자인 패턴입니다.
드류 (Drew)가 말했듯이 이것은 신호와 슬롯에 적합하지 않은 것으로 들립니다.
dribe가 말한 것처럼 해결 방법은 거짓으로 시작하는 bool& found
매개 변수가있는 프로토콜입니다. 시작시 모든 슬롯을 확인한 후 true로 설정하면이를 반환합니다. 슬롯이 값을 true로 설정하면 다른 호출의 처리가 매우 빠르게 수행됩니다.
How do I stop the breadth-first search using Boost Graph Library when using a custom visitor?
: 그리고 그들은 다른 선택이 없다 느낄 때 더 낫거나 더 나쁜을 위해, 사람들은 때때로 부스트 그래프 라이브러리의 방문자 알고리즘 동안 같은 ...이 리조트 그렇게하지 마라. :)
는 UPDATE : 그것을 몰랐하지만 당신은 그 부스트 우아 반복자을 가지고 값을 초래하지 컴과 함께이 문제를 처리하기위한 메커니즘이 발견에 전달
"입력 반복자를 결합 자 (combiner)는 역 호출 (dereference) 동작을 슬롯 호출로 변환한다. 따라서 조합자는 일부 특정 기준이 충족 될 때까지 일부 슬롯 만 호출 할 수있다. "
당신이 부스트를 고수하고 있다면 확실한 질문에 답했습니다. 비록 다른 신호/슬롯 시스템 (Qt 같은)은 이것과 평행을 이루지는 않을 것이지만 ...
나는 그것이 부스트와 관련 있다고 태그에 언급했다. 게시물을 편집하여 모두가 내가 부스트에 대해 말하고 있음을 이해할 수 있도록했습니다. 제 질문은 이런 일을하는 데 문제가 있습니까? –
D' oh :) 나는 부스트 시그널 슬롯 대신에 [boost]와 [signals-slots]에 AND 검색을 사용할 수 있도록 태그를 직각으로 만들려고 노력했다. 예를 들어 http : //를 보라. meta.stackexchange.com/questions/34740/when-to-use-hyphenated-taga-tagb-instead-of-searching-taga-and-tagb – HostileFork
반복자 결합 자 패턴은 명백하게 후원에서 승인되며 두 가지 모두에서 가능합니다. 신호 및 signals2, 그래서 당신이 부스트에서 전환하지 않는 것이 확실하다면 그것과 함께 말할 것입니다. – HostileFork
- 1. sbt가 많은 정보를 인쇄하는 것을 막을 수있는 방법이 있습니까?
- 2. VB6 컴파일러가 파일의 내용을 섞는 것을 막을 수있는 방법이 있습니까?
- 3. 파이썬 모듈이 다른 모듈을 호출하는 것을 어떻게 막을 수 있습니까?
- 4. 피연산자 중 하나를 반환하는 부울 연산자
- 5. document.activeElement = ""인 경우 true를 반환하는 단순 조건
- 6. 복합 작업이 아닌 동안 공사를 막을 수있는 방법이 있습니까?
- 7. is_null에서 true를 반환하는 클래스를 가져올 수 있습니까?
- 8. WPF Popup이 화면을 벗어나서 위치를 변경하는 것을 막을 수있는 방법이 있습니까?
- 9. 신호 및 슬롯을 사용하여 포인터 업데이트
- 10. 두 요소 중 하나가 존재하는 경우, 두 요소 중 하나가 존재하는 경우 나는 현재이 확인 않습니다
- 11. 안드로이드에서 키보드로 올라 오는 탭을 막을 수있는 방법이 있습니까?
- 12. WPF- 부모 TreeViewItem이 선택 될 때 TreeViewItems이 선택되고 활성화되는 것을 막을 수있는 방법이 있습니까?
- 13. MainWindow 이외의 클래스에서 슬롯을 만들고 호출하는 방법은 무엇입니까?
- 14. 안드로이드가 내 앱을 죽이는 것을 막을 수 있습니까?
- 15. UI가 멈추는 것을 어떻게 막을 수 있습니까?
- 16. Qt Creator를 사용하여 신호 및 슬롯을 만들 때 오류 발생
- 17. 저장 프로 시저가 실행하지 않고 반환하는 것을 알아낼 방법이 있습니까?
- 18. Android : 길게 누르기로 드래그되는 것을 막을 수있는 방법
- 19. 네트워크를 통해 Qt 신호/슬롯을 실행하기위한 아이디어가 있습니까?
- 20. 물체가 올바르게 폐기되는 것을 어떻게 막을 수 있습니까?
- 21. NHibernate : 감사 필드가 객체를 더럽게 만드는 것을 막을 수 있습니까?
- 22. iPhone이 A-GPS, 셀 타워 신호 강도 또는 Wi-Fi로 CLLocation을 얻은 경우 확인할 방법이 있습니까?
- 23. 해당 필드 중 하나가 함수가되도록 레코드를 선언하는 방법
- 24. (iPhone) 완료 방법을 기다리는 방법, 인수 중 하나가 호출하는 선택자입니다.
- 25. Visual Studio가 BackgroudWorker.DoWork 내에서 예외가 발생하는 것을 막을 수 있습니까?
- 26. 해커가 치명적인 데이터를 데이터베이스에 삽입하는 것을 막을 수있는 더 좋은 방법이 필요합니다.
- 27. 생성자에서 작업하는 데있어서의 단점 중 하나가 의심스러운 경우
- 28. 비동기 이벤트와 해당 콜백을 부울 값을 반환하는 함수로 래핑 할 수 있습니까?
- 29. TreeView의 MultiBinding이 Bindings 값 중 하나가 변경된 경우 TreeViewItems를 축소합니다.
- 30. UML에서 "가상"유스 케이스와 같은 것을 표현할 수있는 방법이 있습니까?
어떤 언어를 사용하고 있습니까? 귀하의 질문 내용은 그것을 포기하지 않습니다. –
태그를 언급하면서 내가 부스트를 추천한다고 생각했습니다. –
신호/슬롯을 사용해서는 안되는 것처럼 들립니다. –