我正在使用可变参数模板来捕获 Isis2 中的静态类型信息,Isis2 是一个原子多播库 (isis2.codeplex.com)。一些 Isis2 事件是通过 upcall 传递的。例如,如果您编写代码
Group g("myGroup");
g.Handlers[UDPATE] += [](string& name, Foo& f) { ... your code };
....
g.OrderedSend(UPDATE, "John Doe", new Foo(...));
然后在组 g 中接收到一个多播,其中包含一个带有字符串和一个 Foo 对象的更新,Isis2 将构造一个 Foo 对象的本地实例,然后使用适当的参数调用这个 lambda。
所以这是我的难题。我有可变参数代码来扫描 OrderedSend 的参数,并且可以捕获构建我的消息所需的静态类型信息。我最终将一个一维参数数组传递给真正的 OrderedSend 方法,每个参数都有它的类型、指针或对数据或对象的安全引用,而对于一个对象,则是一个编组方法的地址。但是要使用可变参数模板来扫描 lambda,我需要查看函数的“内部参数列表”,因为添加到处理程序向量的对象是 lambda:type_traits 方法只会说它是“函数”类型的对象。我从 lambda 的参数列表中寻找字符串和 Foo 类型。但是据我所见, type_traits.h 缺少访问参数列表的任何内容。
GCC-11 特定的选项是解开 typeid 并解析结果字符串。但是是否有一个可变参数模板功能可以让我在编译时获得 lambda 的参数列表?