muf*_*fel 5 c++ lambda gcc c++11
请考虑以下代码:
//this is what I want to call; I cannot modify its signature
void some_library_method(void(*fp)(void));
class Singleton{
public:
static Singleton *instance();
void foo();
void bar();
private:
Singleton();
};
void Singleton::foo(){
//this leads to an error ('this' was not captured for this lambda function)
void(*func_pointer)(void) = []{
Singleton::instance()->bar();
};
some_library_method(func_pointer);
}
Run Code Online (Sandbox Code Playgroud)
我想调用一个我无法修改的函数(见some_library_method上文),它希望函数指针作为参数.调用应该在类成员中完成foo().我知道我无法访问那里的类成员,但我想要做的就是以静态方式访问Class Singleton(检索单例实例).
有什么办法改革的lambda表达式显示目标的编译器,G ++ V4.7.2,它实际上并没有需要参考this?
以下解决方法有效:
template< typename T > T* global_instance() { return T::instance(); }
void(*func_pointer)(void) = []{
global_instance<Singleton>()->bar();
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1084 次 |
| 最近记录: |