0
나는 다음과 같은 클래스 구조가 과부하 :C++ 가상 함수 재정 및
class X
{
// ...
};
class Y : public X
{
// ...
};
class IA
{
public:
virtual void Foo(X* x) = 0;
};
class A : public IA
{
public:
void Foo(Y* y)
{
Foo(static_cast<X*>(y));
}
};
class B : public A
{
public:
virtual void Foo(X* x) override
{
// ...
}
};
그러나,이 코드가 생성하는 컴파일러 오류 :
error C2664: 'void A::Foo(Y *)': cannot convert argument 1 from 'X *' to 'Y *'
그것은을 대체하는 것입니다 해결하는 방법 :: 푸 (Y *)는 다음과 같습니다.
void Foo(Y* y)
{
static_cast<IA*>(this)->Foo(static_cast<X*>(y));
}
이 캐스트가 필요한 이유를 이해하는 데는 많은 어려움이 있습니다. 이것이 안전한 주조가 될 수 있는지 확실하지 않습니다.
과부하 해결 중에 필자의 이해를 돕기 위해 컴파일러는 매개 변수의 암시 적 캐스팅을 최소화하는 기능을 선택해야합니다. 그러나 그것은 여기에있는 것처럼 보이지 않습니다.