【发布时间】:2026-02-06 06:45:01
【问题描述】:
我正在编写一个报告系统,包括一个类 - Datum - 包含各种数据点和一个类 - Statistic - 包含有关报告行的元数据。元数据包括指向 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_getter 的行。
我不擅长解释指向函数的指针,而且我无法弄清楚我实际编写的内容。
我似乎已将 m_getter 声明为指向不带参数并返回双精度的 Datum 成员函数的指针。我不确定const 最终指的是什么。这大约是我想要的 - 我想成为一个指向 const Datum 成员函数的 const 指针,它不带参数并返回一个双精度值。 (我很欣赏这意味着我需要在构造函数中初始化它而不是分配给它。)
我无法弄清楚我最终所说的 getter 是什么,g++ 发出的 *s 超出了我的处理能力。
我应该如何声明 m_getter 和我的构造函数?
【问题讨论】:
-
double Datum::*getter ()不是double (Datum::*getter) (), -
您有名为“getter”和“setter”的成员变量,它们的名称在构造函数中被隐藏,然后分配给“m_getter”和“m_setter”。请贴出真实代码。
-
如果我是你,我会为你的函数指针使用 typedef。这样,您就不会混淆指向函数的指针和指向成员的指针。
-
@xryl669。每当我查找有关指向成员函数的指针的信息时,我都会看到使用
typedefs 的建议。我很欣赏它们在编写后会使它更易于使用,但我认为,至少对我而言,额外的层一开始就会使编写代码变得更加困难。
标签: c++ function-pointers