将lambda参数类型获取到模板参数包中

时间:2012-06-14 23:11:20

标签: c++ lambda c++11 variadic-templates

我几个小时都在寻找答案,但我没找到任何东西...... 所以,这是我的问题:

template<typename Signature> struct wrapper; // (1)

template<typename Ret, typename... Args>
struct wrapper<Ret(Args...)> // (2)
{
  function static get(Ret(*fnc)(Args...), Args... args)
  {
    return function(/*some more stuff here that work*/);
  }
}
基本上,这段代码提取函数的返回类型和参数,并返回一个通用函数容器。此代码使用简单的功能。 但后来我尝试使用lambdas。 没有这个包装器(通过手写完整的原型)代码工作,我能够调用lambda。 但是当我使用带有lambda函数的这个包装器时,我得到了一些

  

'./ some-file.cpp:xy:z:错误:不完整类型'wrapper&gt;'用于嵌套名称说明符'

错误是由两点(1)和(2)引起的,因为lambda不能适合函数指针吗? 我正在寻找一种方法将lambda的参数类型转换为模板参数包(返回类型并不重要,我的所有lambda都没有返回值(所以它是无效的)) 在此先感谢您的帮助:)

1 个答案:

答案 0 :(得分:-1)

您似乎只声明 wrapper结构,实际上定义它。

尝试正确定义结构:

template<typename Signature> struct wrapper {};