如何使类模板参数可选?

时间:2011-09-22 20:51:52

标签: c++ templates

有没有办法让模板类参数可选? 特别是在这个例子中:

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

我想要一个与此相同的模板版本:

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

但我不想复制所有代码。有可能吗?

1 个答案:

答案 0 :(得分: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会是什么样子。