をポインタへのポインタをキャスト:型セーフな方法で次のコード片を考える
class Base
{
public:
virtual ~Base() = default;
};
class Derived : public Base { };
int main(void)
{
Derived d;
Base* pb = &d;
Base** ppb = &pb;
Derived** ppd = ...; // Can this be defined in a type-safe manner?
return 0;
}
型の中間変数を導入することなく、ppd
に割り当てるための型セーフな発現を与えることが可能ですDerived*
?
'ppd'が指し示す' Dervied * 'オブジェクトはありません。最初に紹介する必要があります。あなたが聞く前に、 'pb'はそれではありません。 –
@IgorTandetnik質問を更新したので、「ppd」のオブジェクトを指すようにするのは理想ではないことは明らかです。 –
タイプ 'T *'の有効なポインタはヌルであるか、タイプが 'T'のオブジェクトを指しています。 'Derived *'型のオブジェクトをプログラムのどこにも持っておらず、また、導入しようとしないので、 'ppd'はnullにしかなりません。私は 'Derived ** ppd = nullptr; 'と答えていますが、あなたが探していた答えはあまりありません。 –