使用VS2013,我可以将typedef创建为如下的函数类型:

typedef void ResponseCallback(std::string const&);


是否可以使用类型别名(我可以使用C ++ 11功能)来做到这一点?我一直在尝试从使用typedef迁移出去,因为using似乎更加一致。我已经尝试过类似下面的方法,但是它不起作用:

using ResponseCallback = void (std::string const&);


我从Visual Studio 2013中收到隐约无助的错误消息,如下所示:


  错误C2061:语法错误:标识符“字符串”

最佳答案

但是,您可以将其包装。

template < typename P1 >
using ResponseCallback =
typename std::remove_pointer < void (*)( P1 const & ) >::type;


我在VS2013上测试过,这里是coliru

或者像这样的简单伪造包装器也将满足VS2013:

template < typename functype >
struct functype_wrapper
{
    typedef functype type;
};

//using ResponseCallback = void ( std::string const & ); // nope
using ResponseCallback = functype_wrapper < void ( std::string const & ) >::type; // oke

10-08 00:10