我正在尝试创建现有模板的模板。这可能吗 ?怎么样?
我尝试使用函数声明。
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);
答案 0 :(得分:2)
您是指模板类型别名吗?
如果是这样,则必须稍微更改语法:
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);
或者您也可以使用lambda。没有捕获,两个容器都可以工作:
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);
});