使用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