C++ 如何将函数对象作为回调c++;
这方面的后续行动很少: 我已经创建了lambda函数作为一个没有c0x的函数对象 现在的问题是: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 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);