c++ - 指向成员函数的指针 - 无法理解 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_getter 的那一行。
我不擅长解释指向函数的指针,而且我无法弄清楚我实际写了什么。我似乎已将 m_getter 声明为指向不带参数并返回双精度的 Datum 成员函数的指针。我不确定const
最终指的是什么。这大约是我想要的——我想成为一个指向 const Datum 成员函数的 const 指针,它不带参数并返回一个双精度值。(我很欣赏这意味着我需要在构造函数中对其进行初始化,而不是分配给它。)我无法弄清楚我最终要说getter
的是,g++ 发出*
的 s 超出了我的处理能力。
我应该如何声明 m_getter 和我的构造函数?
解决方案
double Datum::*getter ()
声明getter
为一个不带参数的函数,并返回一个指向Datum
a 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)
{
}
推荐阅读
- c# - 绑定到 Nullable Int32 时的绑定表达式错误
- c++ - c ++:用于短路的if块语法内部的多重赋值
- azureservicebus - 使用 Azure 服务总线上的基本路径订阅公共交通主题
- javascript - how to safely distinguish ISO 8601 string and number stored as string in queryParams without regex
- php - 将字符串拆分为 bbcode 部分。PHP
- jquery - 只能拖放位于 kendo ui 网格未锁定侧的行
- sql - 如何从 SQL for Lansweeper 的报告中排除一组项目
- mongodb - 如何对弹性搜索的 kafka 主题进行非规范化
- oracle - userDn and Password are needed for autentication type - None or not
- java - java中的时间比较