void*
以下の例のように、派生クラスのメンバーへのポインターを、そこから基本クラスのポインターにキャストしたいと思います。
#include <iostream>
class Base
{
public:
void function1(){std::cout<<"1"<<std::endl;}
virtual void function2()=0;
};
class Derived : public Base
{
public:
virtual void function2(){std::cout<<"2"<<std::endl;}
};
int main()
{
Derived d;
void ptr* = static_cast<void*>(&d);
Base* baseptr=static_cast<Base*>(ptr);
baseptr->function1();
baseptr->function2();
}
これはコンパイルされ、目的の結果 (出力1
と2
それぞれ) が得られますが、動作することが保証されていますか? static_cast
ここで見つけたの説明: http://en.cppreference.com/w/cpp/language/static_castは、同じvoid*
クラスへのポインターへの変換とそのポインターへの
変換についてのみ言及しています(ポイント10)。