C++ 将lambda参数类型获取到模板参数包中
我已经找了几个小时的答案,但我什么也没找到。。。 所以,我的问题是:C++ 将lambda参数类型获取到模板参数包中,c++,lambda,c++11,variadic-templates,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) { r
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*/);
}
}
模板结构包装器;//(1)
模板
结构包装器//(2)
{
函数静态获取(Ret(*fnc)(参数…,参数…)
{
返回函数(/*这里还有一些有用的东西*/);
}
}
基本上,这段代码提取函数的返回类型和参数,并返回通用函数容器。这段代码使用简单的函数。
但后来我试着用lambdas。
没有这个包装器(通过手写完整的原型),代码就可以工作,我可以调用lambda。
但是当我将这个包装器与lambda函数一起使用时,我得到了一些
'./some file.cpp:xy:z:错误:嵌套名称说明符中使用的类型“wrapper>”不完整
错误是由两点(1)和(2)引起的,因为lambda不能装入函数指针吗?
我正在寻找一种将lambda的参数类型放入模板参数包的方法(返回类型并不重要,我所有的lambda都不返回值(所以它是空的))
提前感谢您的帮助:)看起来您只声明了包装器
结构,实际上并没有定义它
尝试正确定义结构:
template<typename Signature> struct wrapper {};
模板结构包装器{};
您能发布完整的错误消息吗?这是完整的错误消息;)您使用的编译器的版本是什么?gcc(Gentoo 4.5.3-r2 p1.1,pie-0.4.7)4.5.3(是的,lambda函数可以工作)我不认为可变模板可以(无论如何都不正确)。。。您应该在GCC4.7+上进行尝试。有了这一行,它只会移动错误。我得到一个./x.cpp:x:x:error:'get'不是'wrapper'的成员(这是唯一一行)。我的专业似乎与lambda函数不匹配。