2011-10-08 4 views
2

boost::any_cast<>과 조합하여 boost::any을 사용하여 인수 집합을 취해야하는 프레임 워크 코드를 작성하고 있습니다. , 거의 함수 호출과 마찬가지로 배열을 boost::any 유형의 배열로 변환합니다.원래 형식이 서명되었거나 서명되지 않았는지 모르겠다면 boost :: ::가 아닌 정수를 얻는 방법이 있습니까

발신자가 제공 한 번호가 서명되거나 서명되지 않을지 예측하기 어려운 경우를 제외하고 지금까지 모든 것이 잘 작동했습니다. 기존 제품 (Windows 기반)의 많은 코드는 로컬 변수에 대해 및 BYTE 데이터 유형을 사용하므로 이러한 변수 중 하나가 사용될 경우 부호없는 유형이됩니다. 그러나 상수가 하드 코딩 된 경우 가장 간단한 숫자 일 것이고이 경우 숫자가 서명됩니다.

any_cast<int> 또는 any_cast<unsigned int>을 수행해야하는지 예측할 수 없기 때문에 boost::any 배열을 읽는 코드의 50 %가 실패합니다.

원래 유형이 서명되었거나 서명되지 않았더라도 boost::any의 숫자로만 전환하는 방법이 있는지 아는 사람이 있습니까?

답변

2

방법이 없습니다. boost::any은 형식이 정확히 일치해야하는 가장 간단한 형식 지우기 형식을 사용합니다. 원하는 추가 기능을 지원하는 자신 만의 boost::any 클래스를 작성할 수 있습니다. 나는 이것을 할 수있는 방법을 previously demonstrated했습니다. 그 실패

수행 할 수 있습니다

  1. 두 개의 코드 경로, 각 기호 하나 되세요. any_cast<unsigned T>이 throw되는 경우 서명 된 경로로 전환하십시오.
  2. 서명되지 않은 상태에서 시도한 다음 서명하고 전송하려고하면 단일 코드 경로를 사용하십시오.
  3. 부호가있는 경우 부호가없는 any_cast이 던져 지도록하고 사용자가 대처하도록합니다.

그러나 이들 각각은별로 좋지 않습니다. boost::any이 정말로 필요합니까? 특정 유형의 목록을 기대하는 경우 아마도 boost::variant을 원할 것입니다.

+0

감사합니다. – DXM