我有這個C++模板父類的構造
template<class PayloadType>
class Event {
protected:
PayloadType payload;
public:
Event(PayloadType payload);
};
這是定義:
template<class PayloadType>
Event<PayloadType>::Event(PayloadType payload) {
this->payload = payload;
}
而且這樣的:
class SimplePayload {
protected:
int number;
public:
SimplePayload(int number) : number(number) { }
int getNumber() { return number; };
};
template<class PayloadType>
class SimpleEvent : public Event<PayloadType> {
protected:
PayloadType payload;
public:
SimpleEvent(PayloadType payload) : Event<PayloadType>(payload) { }
};
嘗試使用它:
SimplePayload simplePayload;
SimpleEvent<SimplePayload> *simpleEvent = dynamic_cast<SimpleEvent<SimplePayload>*>(new Event<SimplePayload>(simplePayload));
而且我得到這個錯誤:
error: member initializer 'Event' does not name a non-static data member or base class
我怎樣才能正確地構造對象?
對不起,修正了它。這就是我的實際情況。 –
你的演員沒有任何意義。你分配一個'Event'對象實例,不管你說什麼都不會是一個SimpleEvent。 –
'dynamic_cast'用於改變現有變量的類型。在變量創建中使用它是毫無意義的。它也會失敗,因爲參數('new Event ...')不是您要投射到的類型('SimpleEvent ...'),它是基本類型。如果你需要一個派生類型,可以使用'= new SimpleEvent <...>(...)',如果你需要多態性,或者使用普通的非指針'SimpleEvent',如果不需要,可以使用'std :: unique_ptr'。 – chris