如何使用别名声明为函数typedef模板化?

时间:2019-01-15 22:53:11

标签: c++ typedef using-declaration

我只是想转换当前的typedef:

typedef void (Foo::*CallbackName)(int arg);

变成函数别名,我看起来像这样:

template <class T>
using T_CallbackName = void(T::*CallbackName)(int arg); 

这是正确的吗?别名声明看似简单明了,但是函数typedef的语法很奇怪,我不清楚如何对其进行模板化。

2 个答案:

答案 0 :(得分:1)

简单地:

template <class C>
using T_CallbackName = void (C::*)(int);

您可以根据需要租用arg,但应删除CallbackName

顺便说一句,您的第一个typedef可以写为:

using CallbackName = void (Foo::*)(int);

答案 1 :(得分:0)

您还可以使用自动定义功能指针:

  

const auto T_CallbackName = Foo :: CallbackName

或功能参考

  

auto&T_CallbackName = Foo :: CallbackName

请注意,即使您更改了回调参数的数量,此操作仍然有效