相关疑难解决方法(0)

如何将lambda表达式存储为C++ 11中的类的字段?

我想创建一个类,其中客户端可以存储lambda表达式,如类[]() -> void {}的字段,但我无法弄清楚如何这样做. 一个答案建议使用decltype,我尝试没有成功.这是一个ideone源链接.以下是来源和结果:

#include <cstdio>
auto voidLambda = []()->void{};

class MyClass {
public:
     decltype(voidLambda) t;
     MyClass(decltype(voidLambda) t) { 
        this->t = t;
     }
};

int main() {
   MyClass([] {
      printf("hi");
   });
}
Run Code Online (Sandbox Code Playgroud)

结果:

prog.cpp: In constructor 'MyClass::MyClass(<lambda()>)':
prog.cpp:3:79: error: no matching function for call to '<lambda()>::__lambda0()'
prog.cpp:2:20: note: candidates are: <lambda()>::<lambda>(const<lambda()>&)
prog.cpp:2:20: note:                 <lambda()>::<lambda>(<lambda()>&&)
prog.cpp:3:88: error: no match for 'operator=' in '((MyClass*)this)->MyClass::t = t'
prog.cpp: In function 'int main()':
prog.cpp:5:27: error: no matching …
Run Code Online (Sandbox Code Playgroud)

c++ lambda field class c++11

46
推荐指数
2
解决办法
2万
查看次数

如何在可变参数模板类中获取函数指针的参数类型?

这是这个问题的后续问题:具有任何参数列表的函数的泛型函子

我有这个仿函数类(完整代码见上面的链接):

template<typename... ARGS>
class Foo
{
    std::function<void(ARGS...)> m_f;
  public:
    Foo( std::function<void(ARGS...)> f ) : m_f(f) {}
    void operator()(ARGS... args) const { m_f(args...); }
};
Run Code Online (Sandbox Code Playgroud)

在operator()中,我可以使用递归的"剥离"功能轻松访问args ...如http://www2.research.att.com/~bs/C++0xFAQ.html#variadic-templates

我的问题是:我想在构造函数中访问f的参数类型,即ARGS ....显然我无法访问值,因为到目前为止还没有,但参数类型列表以某种方式埋没在f中,不是吗?

c++ function-pointers functor variadic-templates c++11

31
推荐指数
1
解决办法
2万
查看次数