这是个很坑的地方,大多数想法,转换嘛,
我把static_cast<A>(B)不就是把B转成A吗? 错! :
static_cast<window*>(this)->onResize(); //这是拿this当成window,没问题
static_cast<window&>(*this).onResize();//这个也是
static_cast<window>(*this).onResize();
这个相当于:
window temp=(*this);
temp.onResize();
我做了一下测试,你的临时对象的说法应该是对的,
static_cast<window>(*this).onresize(); 确实无法执行到 对象的 base class 部分
static_cast<window*>(this)->onResize(); //这是拿this当成window,没问题
static_cast<window&>(*this).onResize();//这个也是
这两种可以执行到base class 部分,但是因为例子中是 virtual function,所以base class 部分的 vtable pointer 跟 derived class 的 vtable pointer 指向同一个virtual table,里面的 函数是一个,所以会递归调用
而 如果用 window::onResize(),就应该是直接调用的base class 里面的 virtual function 。
应该是这样的