【问题标题】:How do I template a function typedef using an alias declaration?如何使用别名声明对函数 typedef 进行模板化?
【发布时间】:2019-06-10 00:07:54
【问题描述】:
我只是想转换我当前的 typedef:
typedef void (Foo::*CallbackName)(int arg);
进入一个函数别名,我看起来像这样:
template <class T>
using T_CallbackName = void(T::*CallbackName)(int arg);
这是正确的吗?别名声明看起来很简单,但函数 typedef 的语法很奇怪,我不清楚如何模板化它们。
【问题讨论】:
标签:
c++
typedef
using-declaration
【解决方案1】:
简单地说:
template <class C>
using T_CallbackName = void (C::*)(int);
如果你愿意,你可以让arg,但CallbackName应该被删除。
顺便说一句,你的第一个typedef可以写成:
using CallbackName = void (Foo::*)(int);
【解决方案2】:
你也可以使用auto来定义函数指针:
const auto T_CallbackName = Foo::CallbackName
或函数参考
auto& T_CallbackName = Foo::CallbackName
请注意,即使您更改回调参数的数量,这仍然有效