조건부 연산자를 사용하여 개체에 대한 참조를 얻는 데 문제가 있습니다.조건부 연산자 문제
class D
{
virtual void bla() = 0;
};
class D1 : public D
{
void bla() {};
};
class D2 : public D
{
void bla() {};
};
class C
{
public:
C()
{
this->d1 = new D1();
this->d2 = new D2();
}
D1& getD1() {return *d1;};
D2& getD2() {return *d2;}
private:
D1 *d1;
D2 *d2;
};
int main()
{
C c;
D& d = (rand() %2 == 0 ? c.getD1() : c.getD2());
return 0;
}
컴파일이 나에게 다음과 같은 오류 제공 : 나는이 비슷한 설정을 가지고 나는 이것이 C에 따라 불법 이해
WOpenTest.cpp: In function 'int
main()': WOpenTest.cpp:91: error: no
match for conditional 'operator?:' in
'((((unsigned int)rand()) & 1u) == 0u)
? c.C::getD1() : c.C::getD2()'
++ 표준 (as seen in this blog post을),하지만 난 돈 조건 연산자를 사용하지 않고 D
에 대한 참조를 얻는 방법을 알지 못합니다.
아이디어가 있으십니까? 두 가지 내 D&
에
네, 이것은 완벽하게 작동합니다. – laura
여기에는 캐스트 중 하나만 필요하기 때문에 표현이 조금 덜 장황 해집니다. –
@ 리차드, 좋은 메모. 필자가 두 피연산자 모두에 캐스트를 적용하면 쉽게 보일 수 있지만 물론 맞습니다. 컴파일러가 다른 하나를 암시 적으로'D &'로 변환 할 수 있도록 캐스트 하나만으로 충분합니다. –