В С++ я могу выбирать между указателями функций и ссылками на функции (или даже значениями функций для полноты):
void call_function_pointer (void (*function)()) {
(*function) ();
}
void call_function_reference (void (&function)()) {
function ();
}
void call_function_value (void function()) {
function ();
}
Однако, когда дело доходит до методов, у меня нет выбора между указателями и ссылками.
template <class T> void call_method_pointer (T* object, void (T::*method)()) {
(object->*method) ();
}
// the following code creates a compile error
template <class T> void call_method_reference (T& object, void (T::&method)()) {
object.method ();
}
Это приводит меня к предположению, что ссылки на методы не существуют в С++. Это правда? Если это так, то почему они не существуют?