我只是想转换当前的typedef:
typedef void (Foo::*CallbackName)(int arg);
变成函数别名,我看起来像这样:
template <class T>
using T_CallbackName = void(T::*CallbackName)(int arg);
这是正确的吗?别名声明看似简单明了,但是函数typedef的语法很奇怪,我不清楚如何对其进行模板化。
答案 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
请注意,即使您更改了回调参数的数量,此操作仍然有效