указатель на функцию c ++ 'base' - PullRequest
0 голосов
/ 25 марта 2012

Я конвертирую код Fortran в C ++ и хотел найти правильную опцию для функции-указателя.

Код Фортрана: для двух разных случаев он передает два разных типа указателей на функции в другую функцию. Эти указатели функций имеют разные интерфейсы. В C ++ мне нужно указать интерфейс функции-указателя и, следовательно, это не так просто. Может кто-нибудь предложить, если функтор C ++ или что-то еще, это было бы полезно? Я хотел бы использовать что-то вроде 'void (function) pointer', а затем 'cast', но я действительно не знаю. Заранее спасибо.

РЕДАКТИРОВАТЬ: минимальный пример в Fortran

Fortran

if(option1) then
call myfunc( abc_function_pointer,otherarguments)
else
call myfunc( xyz_function_pointer, otherarguments) 
endif

где эти функции (в C ++)

void (*abc_function_pointer)(int, float) //in c++
void (*xyz_function_pointer)(int, int, int) //in c++

1 Ответ

1 голос
/ 25 марта 2012

Вообще говоря, это плохая идея.Подумайте - что будет myfunc делать с указателем на эту функцию?Что произойдет, если вы передадите его abc_function_pointer, но он попытается вызвать его с тремя int с?Или наоборот?

Не зная, для чего вы это используете, трудно предположить, что вам следует делать.Обычно вы хотите выделить общий интерфейс между abc_function_pointer и xyz_function_pointer, поэтому myfunc всегда вызывает функцию с одинаковым типом и интерфейсом.Вы можете вставить функцию подкладки, которая преобразует между общим интерфейсом и интерфейсом abc_function_pointer или xyz_function_pointer.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...