Это кажется непоследовательным. Почему мы используем & Пример :: func вместо примера :: func? есть ли применение для примера :: func или & exampleFunction? это не похоже, что мы можем сделать ссылку на функцию, чтобы исключить Example :: func. и я не могу думать о способе использования & exampleFunction, так как exampleFunction уже возвращает указатель.есть использование для & func или class :: func в C++?
#include <iostream>
class Example {
public:
void func() { std::cout <<"print me\n"; }
};
void exampleFunction() { std::cout << "print me too\n"; }
typedef void (Example::*ExampleFunc_t)();
typedef void (*ExampleFunction_t)();
int main()
{
Example e;
ExampleFunc_t f = &Example::func;
ExampleFunction_t f2 = exampleFunction;
(e.*f)();
f2();
return 0;
}
В C++ есть также функционирует референции (ЬурейиЕ void (& FuncRef_t)()), но не ссылки на функции-члены. – dalle
Да, я думаю, что полезно использовать это неявное преобразование для функций. потому что чаще всего вы хотите передать указатель в любом случае (вы не можете «передать функцию», поэтому он передает указатель на него неявным преобразованием). Я думаю, причина T :: f не достаточна, потому что это было бы неоднозначно: если бы это было –
указатель на функцию-член, то вы не можете записать Base :: f(); для вызова функции базового класса. вам нужно будет написать (this -> * Base :: f)(); который вроде бы сосет. Так что наличие & T :: foo для получения указателя - хорошее решение, я думаю. –