【问题标题】:Get lambda parameters type into template argument pack将 lambda 参数类型获取到模板参数包中
【发布时间】:2012-06-18 01:08:13
【问题描述】:

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

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>'

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

【问题讨论】:

  • 你能发布完整的错误信息吗?
  • 这是完整的错误信息 ;)
  • 你使用什么编译器版本?
  • gcc (Gentoo 4.5.3-r2 p1.1, pie-0.4.7) 4.5.3(是的,lambda 函数有效)
  • 我不认为可变参数模板可以(无论如何都不正确)...您应该尝试使用 GCC 4.7+。

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


【解决方案1】:

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

尝试正确定义结构:

template<typename Signature> struct wrapper {};

【讨论】:

  • 使用这一行,它只是移动错误。我得到一个 ./x.cpp:x:x: error: 'get' is not a member of 'wrapper
    >' (这是唯一的一行)。看来我的专长与 lambda 函数不匹配。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-30
  • 1970-01-01
  • 1970-01-01
  • 2023-03-14
  • 2020-05-02
相关资源
最近更新 更多