缩短boost :: function

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

m.s*_*.s. 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);
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)