2010-08-17 23 views
16

Tôi đang cố gắng sử dụng QSharedPointer trong cấu trúc đa hình của mình, nhưng tôi không thể tìm thấy cú pháp đúng để chuyển đổi con trỏ của lớp cơ sở thành con trỏ của lớp dẫn xuất.Đa hình QSharedPointer

struct Switch : State { 
int a; 
}; 

QSharedPointer <State> myState=QSharedPointer <State>(new Switch); 

QSharedPointer <Switch> mySwitchTest= ??? myState; 

Tôi nên đặt gì vào vị trí ???

Trả lời

22

Sử dụng qSharedPointerCast():

QSharedPointer <Switch> mySwitchTest= qSharedPointerCast<Switch>(myState); 

Hoặc gọi staticCast() trên con trỏ thông minh:

QSharedPointer <Switch> mySwitchTest= myState.staticCast<Switch>(); 

Cả hai phiên bản là về cơ bản tương đương với làm static_cast trên con trỏ thô.

11

Đối với một dàn diễn viên năng động, sử dụng qSharedPointerDynamicCast:

class Derived : public Base { ... }; 
QSharedPointer<Base> base... 

QSharedPointer<Derived> derived = qSharedPointerDynamicCast<Derived>(base); 

Ngoài ra còn có các khoản tương đương cho static_cast (như trong silico cho thấy), qobject_cast và const_cast. Chọn thuốc độc của bạn.