나는 glm
및 Box2D
라이브러리 를 사용하는 프로젝트를 진행하고 있습니다. 둘 다 예를 들어 2D 벡터의 구현을 포함합니다. 때로는 한 라이브러리의 형식에서 다른 형식으로 값을 변환해야합니다. 라이브러리 소스 코드를 수정해야하기 때문에 클래스에 적절한 생성자를 작성할 수는 없습니다. 여러 가지 이유로 나쁜 생각입니다.
이제 명백한 해결책은 예를 들어 서로를 변환하는 유틸리티 함수를 작성하는 것입니다. convertVec2()
. 이것은 작동합니다. 그러나 그것은 약간 투박하고 장황하며, 모호한 언어 기능의 교활한 사용을 사용하여 더 똑똑한 방법이 있는지 궁금합니다.
문제를 해결하는 더 좋은 방법이 있습니까? 아니면 그냥 지루하고 간단한 일을해야합니까?
명백한 해결책은 하나를 다른 것으로 변환하는 유틸리티 함수를 작성하는 것입니다.
그냥 지루하고 간단한 일을해야합니까?
예, 이것은 괜찮은 접근 방식입니다.
레이아웃과 호환되는 유형의 특수한 경우에는 하나에 대한 포인터를 다른 유형에 대한 포인터로 간단히 재 해석 할 수 있습니다.
요컨대, 유형이 동일한 유형이거나 둘 다 표준 레이아웃 클래스이고 각 클래스의 모든 멤버가 다른 클래스의 해당 멤버와 레이아웃 호환되는 경우 유형은 레이아웃 호환 가능합니다. 예를 들어 다음 클래스는 레이아웃과 호환됩니다.
struct Vec2D {
float x, y;
};
struct Point {
float X, Y;
};
C ++ 20부터는 trait 유형으로 테스트 할 수 있습니다 std::is_layout_compatible
.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다