缩短 boost::function
Shortening boost::function
将 boost::function
作为参数传递给另一个函数(回调)时,此函数的签名可能会变得很长。
示例:
考虑这个 boost::function
:
boost::function<MyClass * (
TypeA param1,
TypeB param2,
TypeC param3,
TypeD param4,
TypeE param5,
TypeF param6)> CreateMyClass;
现在,如果我们将此 boost::function
作为函数参数传递,使用它的函数的签名将变得非常长且难以阅读:
void myFunctionUsingTheCallack(boost::function<MyClass * (
TypeA param1,
TypeB param2,
TypeC param3,
TypeD param4,
TypeE param5,
TypeF param6)> the_callback);
我是不是漏掉了什么?
有什么技巧可以缩短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);
如果您使用的是 C++11 或更高版本,则可以使用 using
而不是 typedef
:
using Fun = boost::function<MyClass * (
TypeA param1,
TypeB param2,
TypeC param3,
TypeD param4,
TypeE param5,
TypeF param6)>;
除了显式指定类型之外,您还可以使用函数模板并让编译器推导类型:
template <typename Fun>
void myFunctionUsingTheCallack(Fun the_callback);
另一个选择,在@m.s 发布的两个之上。 (使用具体的 API 来获取类型):
// defined elsewhere:
void some_api(TypeA param1,
TypeB param2,
TypeC param3,
TypeD param4,
TypeE param5,
TypeF param6);
using native_callback_t = decltype(&some_api);
void myFunctionUsingTheCallack(std::function<native_callback_t> callback);
将 boost::function
作为参数传递给另一个函数(回调)时,此函数的签名可能会变得很长。
示例:
考虑这个 boost::function
:
boost::function<MyClass * (
TypeA param1,
TypeB param2,
TypeC param3,
TypeD param4,
TypeE param5,
TypeF param6)> CreateMyClass;
现在,如果我们将此 boost::function
作为函数参数传递,使用它的函数的签名将变得非常长且难以阅读:
void myFunctionUsingTheCallack(boost::function<MyClass * (
TypeA param1,
TypeB param2,
TypeC param3,
TypeD param4,
TypeE param5,
TypeF param6)> the_callback);
我是不是漏掉了什么?
有什么技巧可以缩短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);
如果您使用的是 C++11 或更高版本,则可以使用 using
而不是 typedef
:
using Fun = boost::function<MyClass * (
TypeA param1,
TypeB param2,
TypeC param3,
TypeD param4,
TypeE param5,
TypeF param6)>;
除了显式指定类型之外,您还可以使用函数模板并让编译器推导类型:
template <typename Fun>
void myFunctionUsingTheCallack(Fun the_callback);
另一个选择,在@m.s 发布的两个之上。 (使用具体的 API 来获取类型):
// defined elsewhere:
void some_api(TypeA param1,
TypeB param2,
TypeC param3,
TypeD param4,
TypeE param5,
TypeF param6);
using native_callback_t = decltype(&some_api);
void myFunctionUsingTheCallack(std::function<native_callback_t> callback);