C++ 如何将函数对象作为回调c++;

C++ 如何将函数对象作为回调c++;,c++,functor,C++,Functor,这方面的后续行动很少: 我已经创建了lambda函数作为一个没有c0x的函数对象 现在的问题是: 如何将其作为回调/函数指针传递给另一个函数 我的第一次尝试是这样的,但没有成功: Lambda Obj( C, D); command ( Obj.operator()(typeA A, typeB B)); 我想我把另一个问题标到了前面,所以没有人看了编辑。如果你在std::tr1::function中找不到std::function或者通过std::function或者通过编译器升级找不到

这方面的后续行动很少:

我已经创建了lambda函数作为一个没有c0x的函数对象

现在的问题是:

  • 如何将其作为回调/函数指针传递给另一个函数
我的第一次尝试是这样的,但没有成功:

Lambda Obj( C, D);
command ( Obj.operator()(typeA A, typeB B));

我想我把另一个问题标到了前面,所以没有人看了编辑。

如果你在
std::tr1::function
中找不到
std::function
或者通过
std::function
或者通过编译器升级找不到
std::function

编写自己的
std::function
-类似类型橡皮擦,或使用
boost
,或使用“尽可能快的委托”(这应该搜索到一个完整的实现),或将
指针和方法指针作为
模板
类型参数传递给函数,或者将函数对象的
模板
类型导出副本传递给函数

请注意,最后两个选项要求公开函数体(例如在头文件中)

或者将函数对象转换为
void*
样式C回调


我会使用C++11,但是没有通过
boost
,没有通过fast委托,没有通过自己编写一个类型橡皮擦,没有通过页眉和模板中的粘贴体+传递副本(除非函数很简单,在这种情况下先这样做),如果您在
std::tr1::function
中或通过
std::function
或通过编译器升级找不到
std::function

编写自己的
std::function
-类似类型橡皮擦,或使用
boost
,或使用“尽可能快的委托”(这应该搜索到一个完整的实现),或将
指针和方法指针作为
模板
类型参数传递给函数,或者将函数对象的
模板
类型导出副本传递给函数

请注意,最后两个选项要求公开函数体(例如在头文件中)

或者将函数对象转换为
void*
样式C回调


我会使用C++11,但是没有通过
boost
,没有通过fast委托,没有通过自己编写一个类型橡皮擦,没有通过页眉和模板中的粘贴体+传递副本(除非函数很简单,在这种情况下先这样做),如果您在
std::tr1::function
中或通过
std::function
或通过编译器升级找不到
std::function

编写自己的
std::function
-类似类型橡皮擦,或使用
boost
,或使用“尽可能快的委托”(这应该搜索到一个完整的实现),或将
指针和方法指针作为
模板
类型参数传递给函数,或者将函数对象的
模板
类型导出副本传递给函数

请注意,最后两个选项要求公开函数体(例如在头文件中)

或者将函数对象转换为
void*
样式C回调


我会使用C++11,但是没有通过
boost
,没有通过fast委托,没有通过自己编写一个类型橡皮擦,没有通过页眉和模板中的粘贴体+传递副本(除非函数很简单,在这种情况下先这样做),如果您在
std::tr1::function
中或通过
std::function
或通过编译器升级找不到
std::function

编写自己的
std::function
-类似类型橡皮擦,或使用
boost
,或使用“尽可能快的委托”(这应该搜索到一个完整的实现),或将
指针和方法指针作为
模板
类型参数传递给函数,或者将函数对象的
模板
类型导出副本传递给函数

请注意,最后两个选项要求公开函数体(例如在头文件中)

或者将函数对象转换为
void*
样式C回调

我会使用C++11,但没有通过
boost
,没有通过fast委托,没有通过自己编写类型橡皮擦,没有通过标题和模板中的粘贴体+传递副本(除非函数很简单,在这种情况下,首先执行此操作),没有通过pvoid C样式。

使用:

void命令(boost::function func)
{
func();
}
λObj(C,D);
命令(boost::bind(Obj,A,B));
(或者你可能想要):

void命令(boost::function func)
{
retType ret=func(A,B);
}
λObj(C,D);
命令(boost::bind(Obj,_1,_2));//占位符
使用模板(STL的方式):

模板
void命令(F func)
{
func(A,B);
}
λObj(C,D);
指挥部(Obj);

使用:

void命令(boost::function func)
{
func();
}
λObj(C,D);
命令(boost::bind(Obj,A,B));
(或者你可能想要):

void命令(boost::function func)
{
retType ret=func(A,B);
}
λObj(C,D);
命令(boost::bind(Obj,_1,_2));//占位符
使用模板(STL的方式):

模板
void命令(F func)
{
func(A,B);
}
λObj(C,D);
指挥部(Obj);

使用:

void命令(boost::function func)
{
func();
}
λObj(C,D);
命令(boost::bind(Obj,A,B));
(或者你可能想要):

void命令(boost::function func)
{
retType ret=func(A,B);
}
λObj(C,D);
命令(boost::bind(Obj,_1,_2));//占位符
使用模板(STL的方式):

模板
void命令(F func)
{
func(A,B);
}
λObj(C,D);
指挥部(Obj);

使用:

void命令(boost::function fu)
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
template <typename F>
void command(F func)
{
    func(A, B);
}

Lambda Obj(C, D);
command(Obj);