相关疑难解决方法(0)

static_cast从Derived*到void*到Base*

我想将指向派生类的成员的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)

这将编译并给出了期望的结果(打印12分别),但它是保证工作?static_cast我在这里找到的描述:http://en.cppreference.com/w/cpp/language/static_cast 仅提到转换为void*指向同一类的指针(第10点).

c++ static-cast

7
推荐指数
1
解决办法
1144
查看次数

unique_ptr,make_unique和polymorphism

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)

这样你就可以用它来创建派生对象了吗?
谁知道不这样做的理性背后?

c++

1
推荐指数
1
解决办法
2784
查看次数

标签 统计

c++ ×2

static-cast ×1