代码之家  ›  专栏  ›  技术社区  ›  Danny

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

  •  0
  • Danny  · 技术社区  · 7 年前

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

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

    到一个函数别名中,我看到的是:

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

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

    2 回复  |  直到 7 年前
        1
  •  1
  •   Jarod42    7 年前

    简单地说:

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

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

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

    using CallbackName = void (Foo::*)(int);
    
        2
  •  0
  •   Sebastian    7 年前

    还可以使用auto定义函数指针:

    const auto t_callbackname=foo::callbackname

    或函数引用

    自动回调名称=foo::回调名称

    注意,即使更改回调参数的数目,这仍然有效。