동일한 데이터 레이아웃을 가진 두 클래스 A와 B (즉, 멤버가 아닌 함수 만 다른 경우)를 통해 암시 적으로 변환 할 수있는 참조 유형을 어떻게 만들 수 있습니까?참조 유형 간의 암시 적 변환
struct Storage
{
uint32_t a, b;
};
class First : private Storage
{
int32_t GetA() { return a; }
int32_t GetB() { return b; }
};
class Second : private Storage
{
int64_t GetA() { return a; }
int64_t GetB() { return b; }
};
void FuncF(const First& first);
void FuncS(const Second& second);
// I would like to be able to call like
int main()
{
First f;
Second s;
FuncF(s); // Conversion fails
FuncS(f); // Conversion fails
return 0;
}
난 내가 한 방향으로 작업 전환을 얻을 수 있습니다 class First : Second
처럼 상속을 사용 또한 경우, 패스 별 사본을 작업 위를 얻을 수 있습니다.
(위의 예제는 고의적 인 예제이므로 int32_t 및 int64_t 반환 유형이 uint32_t에서 생성 될 수있는 더 복잡한 클래스라고 생각할 수 있습니다.)
분명히 말하자면 나는 데이터가 동일하다는 사실에 의거하여 First
개체를 Second
참조로 바인딩하거나 그 반대로도 바인딩 할 수 있기를 바랍니다.() 둘째 : 연산자 우선;
FuncS(static_cast<Second&>(f)); // This works, is it standard (ie portable)
// and can I define the class so the cast is not necessary?
상속을 공개 할 수 있습니다. 그러면 두 유형의 값을 기준에 대한 참조로 바인딩 할 수 있습니다. –