Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何使类模板参数成为可选参数?_C++_Templates - Fatal编程技术网

C++ 如何使类模板参数成为可选参数?

C++ 如何使类模板参数成为可选参数?,c++,templates,C++,Templates,有没有办法使模板类参数可选? 具体而言,在本例中: template <typename EVT> class Event : public EventBase { public: void raise(EVT data){ someFunctionCall(data); } } 但是我不想重复所有的代码。是否可能?使用默认模板参数和模板专用化: template <typename EVT=void> clas

有没有办法使模板类参数可选?
具体而言,在本例中:

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

但是我不想重复所有的代码。是否可能?

使用默认模板参数和模板专用化:

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();
    }
};
模板
类事件:公共事件库{
公众:
无效上升(EVT数据){
someFunctionCall(数据);
}
};
模板
类事件:公共事件库{
公众:
作废{
someFunctionCall();
}
};

但是,我看不出EventBase是什么样子。

请注意,这确实需要您重新定义所有成员,或将它们移动到共享基类。还要注意,实例化专门化有一个意外的语法:
Event MyEvent@MooingDuck我正要问这个!另一个选项是将默认类设置为非模板类。@VJo:那么它必须有一个不同的名称。
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();
    }
};