2016-04-16 3 views
1

Я видел this, но он никогда не указывал, как объявить указатель функции, который возвращает указатель на функцию (он просто определил, как создать функцию, возвращающую указатель на функцию).Как вы пишете указатель на функцию, который возвращает указатель на функцию без использования typedefs?

Хотя было бы разумнее использовать typedefs, я заинтересован в синтаксисе, чтобы выполнить это без typedefs.

Это ближайший я получил:

struct function_hash_table { 
    unsigned int(*(*getFunction)(Type, Type, Type))(char *name); 
} 

(Какой на самом деле весьма не имеет отношения к этому вопросу).

Но, когда я пытаюсь назвать это так:

hash_table.getFunction("Test"); 

я получаю ошибки слишком несколько параметров и неправильных типов параметров.

уточнить:

unsigned int(*hash_get_function(Type, Type, Type))(char *name) 

работает хорошо для реальных функций и объяснено в ссылке. Однако, как я могу объявить указатель функции, который ссылается на такое определение?

+0

«никогда не указано, как объявить указатель на функцию, которая возвращает функцию (она просто определяется как создать функцию, возвращающую указатель на функцию)» - в C, Функциональные указатели не являются первоклассными. Вы не можете вернуть функцию. Вы можете вернуть указатель на функцию. –

+0

Моя формулировка, по-видимому, вводит в заблуждение. Я понимаю, что вы только что сказали, но об этом я не спрашивал. Если бы мне не пришлось помещать getFunction внутри структуры, я бы мог написать ее правильно. Вопрос заключается в том, как определить указатель на функцию, который эквивалентен функции, которая не находится внутри структуры. – Isaiah

+0

Не имеет значения, является ли ваш указатель членом структуры или «автономной» переменной. Декларация одинаков. –

ответ

2

как объявить указатель на функцию, которая возвращает указатель к а-функции

без использования typedef вы можете объявить как прочитанный

Type (* (*funcPtr)(Type, Type)) (Type); 

Декларация: funcPtr является указатель на функцию, которая ожидает два аргумента типа Type и возвращает указатель на функцию, которая ожидает аргумент типа Type и возвращает Type.

Если вы тусклый объявить функцию, которая возвратит указатель затем

Type (* func(Type, Type)) (Type); 

Декларации читаться как: func это функция, которая принимает два параметра типа Type и возвращает указатель на функцию, которая принимает аргумент тип Type и возвращает Type.

Теперь вы можете назначить func для funcPtr

functPtr = func; 
+0

Думаю, я сейчас вижу. Мне нужно отменить расположение oparameter. – Isaiah

Смежные вопросы