在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++中不存在方法引用。 如果是这样,那么它们不存在的原因是什么?
.*
和->*
的用途。问题在于为什么没有成员引用的等效物,即使对象引用和函数引用存在。即使在c.l.c++上,也有多次讨论以至于某人一旦问到“为什么”就会死路一条。我个人非常好奇其中的原理,我相信它被埋藏在某些草案评论中。 - Jason C