【问题标题】: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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-02
        • 2021-12-31
        • 1970-01-01
        相关资源
        最近更新 更多