Я пишу систему отчетности, включая класс - Datum - с различными точками данных и класс - Statisti c - с метаданными о строках отчета. Метаданные включают указатели на функции-члены Datum для получения и установки данных.
class Statistic
{
.
.
.
double (Datum::*getter) () const;
void (Datum::*setter) (const double);
.
.
.
}
Я написал конструктор для Statisti c:
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, не принимающую аргументов и возвращающую двойное значение. (Я понимаю, что это означает, что мне нужно инициализировать его в конструкторе, а не присваивать ему.) Я не могу понять, что я в итоге сказал, что getter
- это, g ++ испускает больше *
s, чем я могу справиться with.
Как мне объявить m_getter и мой конструктор?