Сделать шаблон из существующего шаблона класса - PullRequest
0 голосов
/ 12 февраля 2019

Я пытаюсь создать шаблон из существующего шаблона.Это возможно ?Как?

Я пытался использовать объявление функции.

template<typename... Args> std::pair<char*, std::vector<void(*)(Args...)>> events_list;

events_list<ButtonEvent> button_event; // Doesn't work : pointer to function conversion.

Я ожидаю, что результатом будет простой обработчик события on / emit, подобный этому.

static void onClick(ButtonEvent e) {
    printf(e.buttonId);
}

events_list<ButtonEvent> button_event;
button_event.push_back(onClick);

1 Ответ

0 голосов
/ 12 февраля 2019

Вы имели в виду псевдоним типа шаблона?

Если это так, то вам придется немного изменить синтаксис:

template<typename... Args>
using events_list = std::pair<char*, std::vector<void(*)(Args...)>>;

Если вы хотите использовать std::function вместоуказателя на функцию, попробуйте это:

template<typename... Args>
using events_list = std::pair<char*, std::vector<std::function<void(Args...)>>;

Вы также, кажется, хотите удобный способ вставки новых событий.Это будет выглядеть немного иначе, если вы выберете контейнер, который выбрали:

// static member function are normal function pointers.
button_event.second.push_back(&YouClass::onClick);

Или вы также можете использовать лямбду.Без захватов оба контейнера будут работать:

button_event.second.push_back([](ButtonEvent e) {
    onClick(e);
});

// with captures (only work with the std::function)
button_event.second.push_back([this](ButtonEvent e) {
    this->onClickNonStatic(e);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...