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

How do I template a function typedef using an alias declaration?

我只是想转换我当前的 typedef:

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

进入函数别名,我看起来像:

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

这是正确的吗?别名声明看起来很简单,但函数 typedef 的语法很奇怪,我不清楚如何模板化它们。

简单:

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

如果你愿意,你可以让 arg,但是 CallbackName 应该被删除。

顺便说一句,你的第一个 typedef 可以写成:

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

你也可以使用auto来定义函数指针:

const auto T_CallbackName = Foo::CallbackName

或函数参考

auto& T_CallbackName = Foo::CallbackName

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