首页 > 解决方案 > 指向成员函数的指针 - 无法理解 g++ 错误消息

问题描述

我正在编写一个报告系统,包括一个类 - Datum - 具有各种数据点和一个类 - 统计 - 具有有关报告行的元数据。元数据包括指向 Datum 成员函数以获取和设置数据的指针。

class Statistic
{
    .
    .
    .
        double (Datum::*getter) () const;
        void (Datum::*setter) (const double);
    .
    .
    .
}

我为 Statistic 编写了一个构造函数:

Statistic::Statistic (
        double Datum::*a_getter (),
        void (Datum::*a_setter)(const double))
{
    getter  = a_getter;
    setter  = a_setter;
}

这不编译;g++ 输出错误

不能在赋值中将'double Datum::* ( * )()' 转换为 'double (Datum::*)() const'

[注意:第二个星号和括号之间没有空格,但如果我将它们省略,格式化后星号不会显示]

在分配给 m_ge​​tter 的那一行。

我不擅长解释指向函数的指针,而且我无法弄清楚我实际写了什么。我似乎已将 m_ge​​tter 声明为指向不带参数并返回双精度的 Datum 成员函数的指针。我不确定const最终指的是什么。这大约是我想要的——我想成为一个指向 const Datum 成员函数的 const 指针,它不带参数并返回一个双精度值。(我很欣赏这意味着我需要在构造函数中对其进行初始化,而不是分配给它。)我无法弄清楚我最终要说getter的是,g++ 发出*的 s 超出了我的处理能力。

我应该如何声明 m_ge​​tter 和我的构造函数?

标签: c++function-pointers

解决方案


double Datum::*getter ()声明getter为一个不带参数的函数,并返回一个指向Datuma double- a的指向成员的指针double Datum::*

使用与成员声明中相同的语法;double (Datum::*getter) ().

甚至更好:使用类型别名。

class Statistc
{
    using getter_function = double (Datum::*)() const;
    using setter_function = void (Datum::*)(double);

    getter_function m_getter;
    setter_function m_setter;

    // ...
};
Statistic::Statistic (
        getter_function getter,
        setter_function setter)
    : m_getter(getter),
      m_setter(setter)
{
}

推荐阅读