Я не нашел решения с точным синтаксисом, который вы ищете, но что-то вроде этого работает:

ТИРОВАТЬ: МОТИВАЦИЯ

Предположим, я определяю класс Handler как

class Handler {
public:
  class Message { /*...*/ };
  typedef int (*Callback)(Message *msg);
  void registerCallback(int msgclass, Callback f);
};

Клиент может сделать

int f1(Handler::Message *msg)
{ /* handle message */ }

int f2(Handler::Message *msg)
{ /* handle message */ }

int main(){
  Handler h;
  h.registerCallback(1, f1);
  h.registerCallback(2, f2);
  // ....
}

Компилятор действительно проверит, чтоf1 а такжеf2 подходят в качестве параметров дляregisterCallbackоднако, клиент должен определитьf1 а такжеf2 правильно. Так как я ужеtypedefизданиеCallbackЯ бы хотел, чтобы клиент мог использовать его вместо этого.

КОНЕЦ РЕДАКТИРОВАНИЯ

Я хотел бы сделать что-то вроде этого:

typedef int arithmetic(int i, int j);

arithmetic sum
{
 return i+j;
}

arithmetic max
{
  return (i>j)? i:j;
}
// etc.

Тем не менее, оба

arithmetic sum
arithmetic sum()

не компилировать, а также это

arithmetic sum(int i, int j)

что дает ошибку компилятора

func.cpp: 4: ошибка: «сумма» объявлена ​​как функция, возвращающая функцию

Причина, по которой я хочу, это то, что я хочу иметьHandler класс, который обеспечитtypedef для функции обратного вызова он принимает,включая список параметров.

Ответы на вопрос(5)

Ваш ответ на вопрос