39

C++ では、関数ポインターと関数参照 (完全を期すために関数値も) を選択できます。

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 ();
}

これは、メソッド参照が C++ に存在しないという仮定につながります。本当?もしそうなら、それらが存在しない理由は何ですか?

4

1 に答える 1