문제

저는 프로젝트에서 두 개의 서로 다른 라이브러리를 사용하고 있으며 둘 다 기본 사각형 유전자 태그 코드를 제공합니다. 이것의 문제는 유형간에 변환을 삽입 할 방법이없는 것 같아서 한 라이브러리에서 다른 함수의 결과로 함수를 호출 할 수 없다는 것입니다. 내가 이들 중 하나의 작성자라면 외부에서 전환을 생성 할 수 있지만 그렇게 할 수 없습니다.

라이브러리 A : 라코 디스

라이브러리 b : 라코 디스

이제 C ++는 한 단계로만 변환을 찾기 때문에 변환기 유전자 태그 코드를 만들 수 없습니다. 모든 종류의 새로운 객체를 생성하는 것과 관련된 많은 가능성이 있기 때문에 이것은 아마도 좋은 것입니다.

struct에서 class를 가져오고 struct에서 a의 객체를 제공하는 연산자를 만들 수 없습니다. 라코 디스

이 문제를 해결할 수있는 합리적인 방법이 있습니까?

수정 :

또한 결과를 원활하게 처리 할 수있는 솔루션이 필요하다는 점도 지적해야합니다. 그 코더가 될 것으로 기대하지 않기 때문입니다. (내가 동의하지만 구식의 명시 적 변환이 좋은 선택이었을 것입니다. 다른 지점 인 class 에도 같은 문제가 있습니다 ..)

edit2 :

사실, 제 실제 질문에 대한 제안 사항은 전혀 없습니다. Konrad Rudolph 가 올바른 것 같습니다. C ++는 실제로 이것을 할 수 없습니다. 짜증나지만 사실입니다. (차이가 있다면 CodingTheWheel 에서 제안한대로 서브 클래 싱을 시도하겠습니다.

도움이 되었습니까?

해결책

구조를 수정할 수 없다면 변환 연산자 오버로딩이 클래스 본문 내에서만 작동하기 때문에 수동 변환 함수를 작성하는 것 외에는 대안이 없습니다.다른 방법은 없습니다.

다른 팁

중간 shim 유형 'RectangleEx'를 만들고 타사 문자열 유형과의 맞춤 변환을 정의합니다.API 중 하나에 대해 말할 때마다 shim 클래스를 통해 수행하십시오.

또 다른 방법은 class 또는 rect에서 Rectangle를 파생하고 여기에 전환 / 생성자를 삽입하는 것입니다.

이게 얼마나 현명한 지 잘 모르겠지만 다음은 어떨까요? 라코 디스

그런 다음 모든 rectangleR()로 래핑하면 "올바른 일"이 발생합니다.

귀하의 경우에는 불가능할 수 있지만 사람들이 유형을 호환성으로 마사지하기 위해 약간의 전 처리기 -foo를 사용하는 것을 보았습니다.

이 경우에도 하나 또는 두 개의 라이브러리를 구축한다고 가정합니다.

아무것도 원하지 않지만 초기 결정을 재평가하고 싶을 수도 있습니다.아니면 아닙니다.

이렇게 간단한 것이 아닌 이유 : (이것이 컴파일되지 않을 수도 있음에 유의하십시오)하지만 당신은 아이디어를 얻었습니다 ... 라코 디스

수정 : koko의 것처럼 보이며 동일한 아이디어를 가지고 있습니다.

struct가 내부적으로 동일하다면 reinterpret_cast 를 수행 할 수 있습니다.;그러나 16 비트 대 32 비트 필드가있는 것처럼 보이기 때문에 각 호출에서 변환하거나 라이브러리 중 하나의 모든 함수에 대한 래퍼를 작성하는 데 문제가있을 수 있습니다.

아마도 연산자 오버로딩으로 시도해 볼 수 있습니까?(당신의 클래스의 메소드가 아닌= 연산자 일 수도 있습니다)?

Rect operator= (const Rect &, const rectangle &)

자세한 내용은 Bjarne Stroustrup의 C ++ 프로그래밍 언어 또는 다음 페이지에서 확인할 수 있습니다. http://www.cs.caltech.edu/courses/cs11/material/cpp/donnie/cpp-ops.html

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top