Как определить указатель на функцию, который принимает те же аргументы и возвращает значение, что и данная функция? - PullRequest
2 голосов
/ 16 апреля 2011

Например, у меня есть функция foo:

int foo(int a, int b)
{
    return a + b;
}

Я могу определить указатель функции:

int (*pfoo)(int, int);

Но как я могу сделать это динамически в программе?
Мне нужна функция, которая принимает функцию в качестве параметра и возвращает указатель на функцию, которая принимает те же аргументы и возвращает значение, что и данная функция.
Затем я могу использовать ее следующим образом:

void* pfoo = getFuncPtrFromFunc(foo);  

Что делает код, приведенный выше.

Возможно ли это?

Ответы [ 2 ]

5 голосов
/ 16 апреля 2011

Вы не можете сделать это во время выполнения (то есть динамически); помните, что все типы (и указатели на функции являются типами) статически определяются во время компиляции.

Представьте, что вы могли бы сделать это, и вы каким-то образом получили указатель на функцию, тип которой был переменным (то есть он мог указывать на float (*)(int,int) или char (*)(float)). Как вы когда-нибудь сможете это назвать и предоставить значимый список аргументов?

Однако вы можете получить эту информацию в время компиляции ; Одним из способов является использование библиотеки Boost TypeTraits .

0 голосов
/ 16 апреля 2011

c ++ является статическим типизированным языком и не позволяет делать то, что вы хотите.

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