Универсальный указатель на функцию C++
Вопрос заключается в следующем: требуется создать класс, содержащий два поля: строку и указатель на функцию. Строка не требует пояснений. Проблемы вызывает указатель: нужно создать объекты данного класса и сделать так, чтобы каждый объект вызывал разные функции. При чем у функций могут отличаться сигнатуры (принимаемые, возвращаемые значения). Но в объектах класса поля будут одинаковыми. Поэтому требуется реализовать "универсальный указатель", который мог бы вызывать различные функции (присвоение адреса функции происходит в конструкторе). А также возникает вопрос по поводу вызова этих функций - каким образом в них передавать параметры, если они вызываются через метод класса? Заранее спасибо за ответ.
Ответы (1 шт):
Если знаете, что именно вызываете (аргументы и тип возвращаемого значения), то в принципе, как-то так:
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
using namespace std; // да, это все же С++ код, по крайней мере g++ считает его своим
typedef void * (*fany)(...);
int
main (int ac, char *av[])
{
fany foo = (fany)open,
bar = (fany)perror;
char *path = av[1] ? av[1] : (char *)"ttt.cpp";
int fd = (ssize_t)foo(path, O_RDONLY);
if (fd == -1)
exit((bar(path), 1));
char buf[1025];
int l;
foo = (fany)read;
bar = (fany)write;
while ((l = (ssize_t)foo(fd, buf, 1024)) > 0)
buf[l] = 0, bar(1, buf, l);
return 0;
}
Понятно, что это пример для функций, возвращающих целый тип (не важно, указатель или число, помещающееся в один регистр).
В классы, надеюсь, сами сможете по аналогии вставить.