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

声明类的成员函数的命名类型[重复]

  •  0
  • Leon  · 技术社区  · 1 年前

    我的类有一组具有完全相同签名的成员函数。

    我需要显式声明这些成员方法的命名类型,以便定义可以用其中一个方法分配的变量/参数。

    这样地:

    class Point_t {
    private:
        int X;
        int Y;
    public:
        int getX();
        int getY();
    };
    
    // This is only to define a variable, not a type name
    int (Point_t::*var_name)() = &Point_t::getX;
    

    但这只是定义一个变量,而不是声明一个类型名。

    此外,这是C风格,我认为它在我的C++代码中非常难看。

    有没有现代的C++风格?

    我希望它看起来像:

    using method_type = Point_t::*;
    

    谢谢

    1 回复  |  直到 1 年前
        1
  •  1
  •   wohlstad    1 年前

    最简单的方法是使用 decltype specifier 哪一个

    检查实体的声明类型或表达式的类型和值类别。

    在您的情况下,它将是:

    using method_type = decltype(&Point_t::getX);
    

    如果你想避免 下降型 (例如,因为它需要指定退出方法),您也可以在没有它的情况下执行以下操作:

    using method_type = int (Point_t::*)();
    

    或者如果你需要这种方法 const :

    using method_type = int (Point_t::*)() const;
    
    推荐文章