Как сделать аргумент шаблона класса необязательным? - PullRequest
1 голос
/ 23 сентября 2011

Есть ли способ сделать аргумент класса шаблона необязательным?
Конкретно в этом примере:

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

Я хочу иметь версию того же шаблона, эквивалентную этой:

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

Но я не хочу дублировать весь код.Возможно ли это?

1 Ответ

3 голосов
/ 23 сентября 2011

С аргументом шаблона по умолчанию и специализацией шаблона:

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...