gpt4 book ai didi

c++ - 制作现有模板类的模板

转载 作者:搜寻专家 更新时间:2023-10-31 02:03:52 25 4
gpt4 key购买 nike

我正在尝试创建现有模板的模板。这可能吗 ?怎么样?

我尝试使用函数声明。

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);

最佳答案

您是指模板类型别名吗?

如果是这样,那么您将不得不稍微更改一下语法:

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);
});

关于c++ - 制作现有模板类的模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54652774/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com