我想将指向派生类的成员的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();
}
Run Code Online (Sandbox Code Playgroud)
这将编译并给出了期望的结果(打印1和2分别),但它是保证工作?static_cast我在这里找到的描述:http://en.cppreference.com/w/cpp/language/static_cast
仅提到转换为void*指向同一类的指针(第10点).
make_unique如果设计如下,则不会更有用:
template< typename T, typename U=T, typename ...ArgT>
unique_ptr<T> make_unique( ArgT ...args )
{
return unique_ptr<T>( new U(args...) );
// maybe parameters should be forwarded, not really important for this question
}
Run Code Online (Sandbox Code Playgroud)
这样你就可以用它来创建派生对象了吗?
谁知道不这样做的理性背后?