В C ++ возможно ли определить несколько методов на основе количества предоставленных параметров шаблона? Похоже на то, как работают переменные функции?
С функциями, которые я могу сделать
template <class ...Args>
struct VariadicFunctionCallback {
typedef std::function<void(std::shared_ptr<Args>...)> variadic;
};
Но я хочу знать, могу ли я сделать нечто подобное, но создать несколько функций вместо нескольких аргументов
template <class ...FunctionArg>
class Example {
void Function(FunctionArg)...
}
Что позволило бы мне сделать что-то вроде
template <>
class Example<int, float> {
void Function(int i) {
...
}
void Function(float f) {
...
}
}
И если это возможно, каковы преимущества перед моей текущей настройкой, которая похожа на
template<class EventType>
class EventHandler {
public:
void HandleEvent(const std::shared_ptr<EventType>& event) {
}
};
class ExampleEvent : public Event<ExampleEvent> {
};
class ExampleHandler : public EventHandler<ExampleHandler>, EventHandler<Events::ShutdownEvent> {
public:
void HandleEvent(const std::shared_ptr<ExampleEvent> &event);
void HandleEvent(const std::shared_ptr<Events::ShutdownEvent> &event);
};
- Изменить -
Я закончил со смесью, если два решения.
Вероятно, это не самый лучший вариант, и я буду продолжать тренироваться и улучшать его со временем.
template <class EventType>
class BaseEventHandler {
public:
EventIdentifier GetIdentifier() const {
return EventType::GetIdentifier();
}
virtual void HandleEvent(const std::shared_ptr<EventType> &event) = 0;
};
template<class EventType, class ...EventTypes>
class EventHandler: public BaseEventHandler<EventTypes>... {
};
Что тогда позволяет мне сделать
class EventListener: public EventHandler<ShutdownEvent, MousePosEvent, WindowCloseRequestEvent> {
void HandleEvent(const std::shared_ptr<ShutdownEvent> &event);
void HandleEvent(const std::shared_ptr<MousePosEvent> &event);
void HandleEvent(const std::shared_ptr<WindowCloseRequestEvent> &event);
}