2011-09-22 38 views
1

有什麼辦法可以使模板類參數可選?
特別是在這個例子中:如何使類模板參數可選?

template <typename EVT> 
class Event : public EventBase { 
public:    
    void raise(EVT data){ 
     someFunctionCall(data); 
    } 
} 

我想有一個版本相同的模板相當於這樣:

class Event : public EventBase { 
public:    
    void raise(){ 
     someFunctionCall(); 
    } 
} 

但我不想重複所有的代碼。可能嗎?

回答

3

在默認模板參數和模板專門:

template <typename EVT=void> 
class Event : public EventBase { 
public:    
    void raise(EVT data){ 
     someFunctionCall(data); 
    } 
}; 

template <> 
class Event<void> : public EventBase { 
public:    
    void raise(){ 
     someFunctionCall(); 
    } 
}; 

不過,我不明白怎麼會有EventBase樣子。

+0

請注意,這確實需要您重新定義所有成員,或將它們移動到共享基類。 –

+0

另外請注意,實例化專業化有一個意想不到的語法:'事件<> MyEvent;' –

+0

@MooingDuck我只是要問! – Damian

相關問題