2015-03-11 5 views
1

Я пытаюсь понять код в заголовке C++.Указатель функции Typedef в C++

#define GET_VAL(fn) void fn(int val) 
typedef GET_VAL ((*get_val)); 
struct myStruct 
{ 
    get_val getValue; 
}; 

В исходном файле вызывается функция getValue.

getValue(2); 

У кого-нибудь есть идеи?

+3

Это ужасный способ объявить указатель на функцию. Я не вижу причины использовать этот макрос, отличный от обфускации. – interjay

+0

Это кусок кода в большом проекте. Я просто дал упрощенную версию. Возможно, у них есть собственное мнение. В любом случае, вы правы, это меня запутывало. – John

ответ

8

Макрос GET_VAL заменяет маркеры, которые вы передаете ему. Это:

typedef GET_VAL ((*get_val)); 

Заменяется:

typedef void (*get_val) (int val); 

Это является указателем на функцию, которая принимает int и ничего не возвращает. Указатель функции этого типа объявлен в myStruct (который предположительно определен в некоторой точке) и называется как регулярная функция.

+0

Спасибо Тартан. Решила мое замешательство. – John

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