РЕДАКТИРОВАТЬ: МОТИВАЦИЯ
Предположим, я определяю класс обработчика как
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
ed Callback
, я бы хотел, чтобы клиент мог использовать его вместо этого.
END EDIT
Я бы хотелхотел бы сделать что-то вроде этого:
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: ошибка: 'sum' объявлена как функция, возвращающая функцию
Причина, по которой я хочу это, заключается в том, что я хочу получить Handler
класс, обеспечивающий typedef
для функции обратного вызова, которую он принимает, , включая список параметров .