考虑以下代码:
//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);
}
我想调用一个我无法修改的函数(请参阅some_library_method
上面)它需要一个函数指针作为参数。调用应该在类成员中完成foo()
。我确实知道我无法访问那里的类成员,但我想做的就是以静态方式访问单例类(检索单例实例)。
有没有什么方法可以改革 lambda 表达式以向目标编译器 g++ v4.7.2 显示它确实如此not需要参考this
?
以下解决方法有效:
template< typename T > T* global_instance() { return T::instance(); }
void(*func_pointer)(void) = []{
global_instance<Singleton>()->bar();
};
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)