나는 작은 디자인 곤경에 처했습니다. 그것은 실제로 "문제"그 자체가 아니에요, 그것은 내가 깨끗한 해결책을 찾을 수 없다는 것을 저에게 귀찮게합니다 :) 그리고 여러분 중 일부는 좋은 아이디어 나 대안적인 해결책을 가지고 있기를 바랍니다.간단한 속성 시스템
통신 채널 (serial/IP, e.t.c)에 동기화되지 않고 언제든지 도착할 수있는 일부 데이터가 있습니다. 개별 데이터 조각은 작거나 int 또는 float입니다. 그것들은 데이터를 보내는 기계의 어떤 상태와 관련이 있습니다. 단일 데이터 항목이 수신 될 때 또는 다중 데이터 항목이 수신되었을 때 경고를받는 간단한 "속성"시스템을 설계하지 않아도됩니다. 예를 들어, 두 개의 int와 float을 성공적으로 수집 할 때 하나의 경고가 나에게 주어집니다. 제가하고 싶은 것은이 같은 (매크로를 사용 또는 무엇이든)
PROPERTY(DATA1)
PROPERTY(DATA2, DATA3)
PROPERTY(DATA4)
이다, 의사 코드에 지금
DATA1 : float
DATA2 : int
DATA3 : int
DATA4 : double
DATA5 : short
:
원격 시스템이 저에게이를 보낼 수 있습니다 말할 수 있습니다 즉, 각 속성은 다양한 양의 데이터 청크를 모니터링하고 모니터링되는 모든 조각이 변경되거나 채워지면 나에게 단일 경고를 보냅니다.
내가 지금 생각한 sigC++를 사용하고있는 것은 훌륭한 콜백 라이브러리입니다. C++은 가변 인수 목록을 실제로 지원하지 않기 때문에 원하는 방식으로 구현할 수 있습니다. 그래서 지금까지 한 것은 하나의 클래스 인 PROPERTY를 갖는 것입니다. PROPERTY는 숫자가 있습니다. 오버로드 된 생성자 중 하나에서 X 개까지의 인수를 지원합니다. 이는 실제로 "동적 인"것은 아닙니다. 더 많은 변수를 모니터링해야하는 경우 인수의 수를 처리 할 수있는 생성자가 있는지 확인해야합니다.
는 어쩌면 그것은 단지 나
헬퍼 클래스를 정의하여 해당 생성 시간을 만들 수 있습니다.이 헬퍼 클래스는 인수를 수집하여 (일부 콜렉션으로)이를 속성으로 전달합니다. 'Property p (PropList(). addInt (xI) .addFloat (xF))'와 비슷합니다. (C++ 03에서는 C++ 11에서 이니셜 라이저 목록이 더 쉽다.) –
니스,이 솔루션은 깨끗한 것 같습니다! 쉽게 작성하고 확장하기 쉽습니다. 감사! – Daniel