很少跟进:C++ lambda function without C++0x?
我已经将lambda函数创建为没有c0x
的函数对象现在的问题是:
我的第一次尝试是这样的,但它不起作用:
Lambda Obj( C, D);
command ( Obj.operator()(typeA A, typeB B));
我想早点标记另一个问题,所以没有人看过编辑。
答案 0 :(得分:2)
如果您在std::function
或std::tr1::function
或通过编译器升级找不到std::function
...
编写您自己的std::function
- 类似橡皮擦,或使用boost
,或使用“最快的代表”(应该谷歌完全实现),或传递{{1} }指针和方法指针为this
- 类型推导的函数参数,或者将函数对象的template
- 类型推导的副本传递给函数。
请注意,最后两个选项需要公开函数的主体(例如在头文件中)。
或者将函数对象转换为template
样式C回调。
我会使用C ++ 11,并且失败那个void*
,并且失败那个快速委托,没有自己写一个类型的橡皮擦,在标题和模板+中传递一个副本没有通过副本(除非函数很简单,在这种情况下首先这样做,并且没有那种pvoid C风格。
答案 1 :(得分:1)
使用Boost.Bind:
void command(boost::function<void()> func)
{
func();
}
Lambda Obj(C, D);
command(boost::bind<void>(Obj, A, B));
(或者你可能想要):
void command(boost::function<retType(typeA, typeB)> func)
{
retType ret = func(A, B);
}
Lambda Obj(C, D);
command(boost::bind<retType>(Obj, _1, _2)); // placeholders
使用模板( STL的方式):
template <typename F>
void command(F func)
{
func(A, B);
}
Lambda Obj(C, D);
command(Obj);