搞不明白,太难了。
我找了个方法绕过去了。
把传入的handler的Callback放在最前面。
假设所有handler都是lambda,对传入handler提取operator()的函数signature
然后把除了Callback的其他所有剩余参数做成一个std::tuple<Args...>
最后把这个带tuple参数的生成的回调传给中间件注册。
这样就能识别类型了。中间件需要把tuple重新转回Args...,对动态语言来说不是事儿。
只是要写成:
reg([](Callback cb, int, double, char)
{
});
把Callback放在最前,可以接受。
退C++保平安。
【 在 allegro 的大作中提到: 】
: 换个能编译的例子:
: [code=c]
: #include <concepts>
: ...................
--
FROM 158.140.1.*