条件演算子を使用してオブジェクトへの参照を取得する際に問題が発生します。私は、これはC++標準(as seen in this blog post)による違法であることを理解条件付き演算子の問題
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()'
が、私はドン:コンパイルするときに、これは私に次のエラーを与える
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;
}
:私はこれまで同様に設定して条件付き演算子を使用せずにD
への参照を取得する方法を知っていません。
アイデア?両方のブランチ内D&
へ
これは完全に機能します。 – laura
ここでもキャストの1つだけが必要です。これにより、表現が少し冗長になります。 –
@リチャード、ああ、良いメモ。私には、両方のオペランドにキャストを適用すればもっと簡単に見えますが、もちろん正しいですが、コンパイラが暗黙的に 'D&'に変換できることをコンパイラに見せてもらえれば十分です。 –