我必须编写一个具有以下接口(interface)的模板函数:
template <typename... Args>
void create(Args&&... args)
我需要能够这样调用它:
create([](int, float){}, 42, 5.f);
并且我希望函数 (lambda) 被调用并在其后传递 2 个参数。我怎样才能做到这一点?
我受限于 create()
的接口(interface) - 我不能分离参数包的函数参数 ouf 因为...原因(相信我)。也许它可以用一些技巧来提取,比如 here并将其余的参数包转发给它...?
这应该适用于接受任意数量参数的函数——而不仅仅是一个 int 和一个 float。
最佳答案
一个简单的解决方案是要求执行一个没有签名限制的辅助函数。
举例
#include <iostream>
template <typename L, typename ... Args>
void create_helper (L const & l, Args && ... args)
{ (void)l(args...); }
template <typename ... Args>
void create (Args && ... args)
{ create_helper(args...); }
int main()
{
create([](int i, float f){ std::cout << i << ", " << f << std::endl; },
42, 5.f);
}
关于c++ - 尝试将参数包的第一个元素作为函数调用并将包的其余部分作为参数传递给它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45063380/