我想将派生类成员的指针转换为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点)。
void*
。 - Robertostatic_cast<Base*>(Derived*)
是安全的 - 你是说那么,static_cast<Base*>(static_cast<void*>(Derived*))
也是安全的吗? - Roberto