Ссылка на функцию-член?
Недавно я узнал, что в С++ существует концепция ссылочной функции:).
Таким образом, существуют разные типы указателей на функцию и указатель-член-функция. Возникает вопрос. Существует ли концепция "ссылка-член-функция"?
Я попытался скомпилировать следующий код, но GCC 3.4.6 дает ошибку.
#include <iostream>
using namespace std;
class A {
public:
virtual void Af() const {
cout << "A::Af()" << endl;
}
};
int main() {
typedef void (A::& MemFnc)() const;
MemFnc mf = &A::Af;
A a;
(a.*mf)();
return 0;
}
Ответы
Ответ 1
Нет такой вещи, которая называется ссылкой на элемент в С++.
Спецификация языка явно указывает в примечании (§8.3.3/3 - 2003), что
Указатель на член не должен указывать на статический член класса (9.4), элемент со ссылочным типом или "cv void". [Примечание: см. Также 5.3 и 5.5. Тип "указатель на член" отличается от типа "указатель", то есть указатель на член объявляется только указателем на синтаксис объявления участника и никогда не является синтаксисом декларатора указателя. В С++ нет типа "ссылка на член".
Ответ 2
Нет ссылки на функцию-член.
Ответ 3
Нет, ссылки на функции-члены не возможны.
В некотором смысле результат разыменования указателя на функцию-член может быть одним, но единственное, что вы можете сделать с этим результатом, - вызвать на нем оператор вызова функции, за 5.5[expr.mptr.oper]/6
. Больше ничего не разрешено.