class BaseA
, class BaseB
및 class DerivedC
(모두 앞으로 전달됨) 클래스가 있다고 가정합니다.기본 클래스에 대한 포인터 또는 참조 얻기
class BaseA
{
public:
BaseA();
BaseA(const BaseB&);
};
및
class BaseB
{
public:
BaseB();
BaseB(const BaseA&);
};
당신이 볼 수 있듯이
, 클래스 A와 B는 각각 다른 변환 할 수 있도록 (구 내가 발명) "대칭 호환"입니다.class DerivedC: virtual BaseA, virtual BaseB
{
public:
DerivedC();
DerivedC(const BaseA &a): BaseA(a), BaseB(a) {};
DerivedC(const BaseB &b): BaseA(b), BaseB(b) {};
void A() {
(BaseA)*this = (BaseB)*this;
};
};
더 우아하고 효율적인 방법이 있는지 궁금합니다. DerivedC의 BaseA 부분을 DerivedC의 BaseB 부분과 동일하게 설정하려고합니다. 그러나이 클래스는 저수준이며 고주파수에서 사용됩니다. 최후의 수단으로 상위 수준에서만 클래스를 사용하는 것을 선호합니다.
편집 : A와 B 사이의 변환에는 아크 탄젠트와 sqrts가 포함됩니다 (그것이 무엇인지 추측 할 수 있습니까?). 그러나 나는 캐스트에서 벗어나고 싶다.
편집 : 기본 클래스에는 상속되어야하는 일부 get-set 및 연산자가 있습니다.
당신은 어댑터 패턴을 구현? 어떤 종류의 메시지? 제네릭 형식 이름을 사용하여 필요한 것을 말하기는 어렵습니다. BaseA와 BaseB가 일반 오래된 데이터 클래스 인 경우,'operator ='연산은 꽤 빨라야합니다. – amwinter
이러한 구문의 실제 적용에는 각각에 대해 get 및 set 함수가있는 두 개의 변수가 포함 된 클래스가 포함됩니다. Vector 클래스 (크기 및 방향 구성 요소 포함) 및 Point 클래스 (x 및 y 구성 요소 포함)로 적용됩니다. 파생 된 파생물은 두 가지 모두에 빠르게 액세스 할 수있는 방법으로 사용됩니다. 반복적으로 변환하지 않고도 – bathtub