C : Какой тип я использую для определения этой карты?

#c #map #function-pointers

#c #словарь #указатели на функции

Вопрос:

Итак, у меня есть указатель на функцию, определенный как:

 unsigned static int (*current_hash_function)(unsigned int);
  

И я пытаюсь создать карту указателей на имена функций:

 typedef std::map<fptr_t, std::string> function_map_t;
  

Но я получаю эту ошибку:

src/main.h:24: ошибка: ISO C запрещает объявление ‘fptr_t’ без типа

Другой код:

main.h:

 typedef (*fptr_t)(unsigned int*);
typedef std::map<fptr_t, std::string> function_map_t;
function_map_t fmap;
  

Комментарии:

1. Не ответ на ваш вопрос, но… Если ваш компилятор поддерживает некоторые функции C 0x, я бы предложил использовать std::function вместо typedefs для указателей на функции. Их будет легче читать и они будут более гибкими.

Ответ №1:

Ваш код «main.h» не присваивает указателю функции typedef возвращаемый тип. Это работает для меня:

 #include <map>
#include <string>

int main()
{
    typedef unsigned (*fptr_t)(unsigned);
    typedef std::map<fptr_t, std::string> function_map_t;
    function_map_t fmap;
}
  

Ответ №2:

Вы пропустили возвращаемый тип:

 typedef int (*fptr_t)(unsigned int*);
  

Ответ №3:

Typedef вашего указателя на функцию равен:

 typedef unsigned int (*fptr_t)(unsigned int)
  

…затем вы можете объявить свою карту следующим образом:

 typedef std::map<fptr_t, std::string> function_map_t;
  

Ответ №4:

Вы не забыли ввести defна указателе функции?

 typedef unsigned int (*fptr_t)(unsigned int);
  

Я считаю, что это правильный синтаксис

Комментарии:

1. unsigned static int это бессмысленно.

2. Это правда, я просто скопировал его footprint функции

3. Он соответствует формату typedef return_type (*name)(arg1_type, .., argN_type) , так что, я полагаю, вы правы.

4. Я знаю, вот почему я не понизил его. ;-] Просто указываю, что это не был правильный синтаксис.

Ответ №5:

В вашем typedef указателе на функцию отсутствует возвращаемый тип:

 typedef unsigned int (*fptr_t)(unsigned int *);
  

Приведенное выше является typedef для указателя на функцию, которая возвращает unsigned int и имеет unsigned int * в качестве параметра.