Метод члена класса как параметр функции шаблона [дубликат]

Мне нравится использовать решение на основе NOT EXIST для этой проблемы:

SELECT id, rev
FROM YourTable t
WHERE NOT EXISTS (
   SELECT * FROM YourTable t WHERE t.id = id AND rev > t.rev
)
7
задан iammilind 7 June 2011 в 09:46
поделиться

4 ответа

Исправлены две ошибки:

int main()
{
   golu m, *n;
   void (golu::*t)() =&golu::man; 

   n=&m;
   (n->*t)();
}
  1. вы хотите, чтобы указатель на функцию
  2. приоритет операторов не тот, который вы ожидали, мне пришлось добавить скобка. n->*t(); интерпретируется как (n->*(t())), пока вы хотите (n->*t)();
8
ответ дан AProgrammer 26 August 2018 в 12:32
поделиться

'void golu :: * t = & amp; golu :: man ();' следует изменить на «void (golu :: * t) () = & amp; golu :: man; ' вы пытаетесь использовать указатель на функцию, а не указатель на результат статической функции!

2
ответ дан Ali1S232 26 August 2018 в 12:32
поделиться

(1) Указатель функции не объявлен должным образом.

(2) Вы должны объявить следующее:

void (golu::*t) () = &golu::man;

(3) Указатель функции функции должен использоваться с объектом class.

1
ответ дан iammilind 26 August 2018 в 12:32
поделиться

Указатель функции-члена имеет следующую форму:

R (C::*Name)(Args...)

Где R - тип возврата, C - тип класса, а Args... - любые возможные параметры функции ( или нет).

С этим знанием ваш указатель должен выглядеть следующим образом:

void (golu::*t)() = &golu::man;

Обратите внимание на отсутствующий () после функции-члена. Это попытается вызвать указатель функции-члена, который вы только что получили, и это невозможно без объекта. Теперь это становится более читаемым с помощью простого typedef:

typedef void (golu::*golu_memfun)();
golu_memfun t = &golu::man;

Наконец, вам не нужен указатель на объект для использования функций-членов, но вам нужна скобка:

golu m;
typedef void (golu::*golu_memfun)();
golu_memfun t = &golu::man;
(m.*t)();

Скобки важны, поскольку оператор () (вызов функции) имеет более высокий приоритет (также называемый приоритет ), чем оператор .*->*).

4
ответ дан Xeo 26 August 2018 в 12:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: