将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
的签名?
答案 0 :(得分:5)
为什么不让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);
答案 1 :(得分:0)
另一种选择,在@ 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);