Цитата(Jurdens @ Nov 8 2007, 16:39)

Какие спец эффекты можно ожидать при преобразовании типов указателей на функцию
В параметрах функции.
Например определим тип указатель на функцию с одним параметром типа указатель на неопределенный тип , функция ничего не возвращает
typedef void (*CPU_FNCT_PTR)(void *);
и тип указатель на функцию
typedef void (*CPU_FNC)(char);
void func2(char ParF2 );
char Data;
func1( void (* Fnc_par)(void *),void * ptrPar);
в параметре функции func1 передаем указатель на функцию с одним параметром типа указатель на неопределенный тип , функция ничего не возвращает.
Передадим указатель на функцию func2 как параметр func1 (приведя ее к типу CPU_FNCT_PTR) и передадим указатель на переменную Data как второй параметр приведя ее к типу void * ;.
Получится такой вызов
func1( (CPU_FNCT_PTR) func2, ( void *)Data);
…….
func1( void (* Fnc_par)(void *),void * ptrPar)
{
*Fnc_par( * ptrPar); // Сработает func2 ? или
// надо преобразовать
*((CPU_FNC ) Fnc_par) ( ( сhar*) ptrPar);
};
А хотелось бы просто указатель на произвольную функцию и ее аргумент тип которого заранее неизвестен
Ну а кто Вам мешает описать еще несколько функций описать так же как func2 и передавать их в func1?
Ведь в описании func1 - у Вас нет ни слова про то, что ей годится только fun2 - не так ли?
По-моему все сработает, если Вы вот так запишете:
func1( (CPU_FNCT_PTR) function, ( void *)Data);
…….
func1( (CPU_FNCT_PTR) function, ( void *)Data)
{
function(Data);
};
Причем сработает для любой функции(func2, func3, func4 ...), если все они будут описаны так же как func2. Что передадите в func1 - то из нее и будет вызвано...
Сообщение отредактировал Николай Z - Nov 8 2007, 14:22