gpa*_*lex 1 c++ boost boost-bind boost-function c++98
将a boost::function
作为参数传递给另一个函数(回调)时,此函数的签名可能会变得很长.
示例:
考虑一下boost::function
:
boost::function<MyClass * (
TypeA param1,
TypeB param2,
TypeC param3,
TypeD param4,
TypeE param5,
TypeF param6)> CreateMyClass;
Run Code Online (Sandbox Code Playgroud)
现在,如果我们将它boost::function
作为函数参数传递,使用它的函数的签名变得非常冗长且难以阅读:
void myFunctionUsingTheCallack(boost::function<MyClass * (
TypeA param1,
TypeB param2,
TypeC param3,
TypeD param4,
TypeE param5,
TypeF param6)> the_callback);
Run Code Online (Sandbox Code Playgroud)
我在这里错过了什么吗?是否有任何缩短签名的技巧myFunctionWithTheCallack
?
你为什么不typedef
给一个较短的名字?
typedef boost::function<MyClass * (
TypeA param1,
TypeB param2,
TypeC param3,
TypeD param4,
TypeE param5,
TypeF param6)> Fun;
Fun CreateMyClass;
void myFunctionUsingTheCallack(Fun the_callback);
Run Code Online (Sandbox Code Playgroud)
如果您使用的是C++ 11或更高版本,则可以使用using
而不是typedef
:
using Fun = boost::function<MyClass * (
TypeA param1,
TypeB param2,
TypeC param3,
TypeD param4,
TypeE param5,
TypeF param6)>;
Run Code Online (Sandbox Code Playgroud)
您也可以使用函数模板而不是显式指定类型,并让编译器推导出类型:
template <typename Fun>
void myFunctionUsingTheCallack(Fun the_callback);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
58 次 |
最近记录: |