std :: vector указателей на функции: разные параметры шаблона

Почему следующий компилятор

std::vector<int(*)(double)> func_ptrs;

но это не

std::vector<int(double)> func_ptrs

?

Я получаю одно из этих уродливых сообщений об ошибках STL во втором случае, так что я не собираюсь помещать все здесь, но в конце сообщения я получаю это

/usr/include/c++/4.8/bits/stl_construct.h:102:30: error: ISO C++ forbids incrementing a pointer of type ‘int (*)(double)’ [-fpermissive]
for (; __first != __last; ++__first)

Кажется, это подразумевает, что C ++ приведёт тип int(double) в int (*) (double), У меня сложилось впечатление, что int(*)(double) а также int(double) в любом случае эквивалентны? Или я не прав?

Хотелось бы получить некоторые разъяснения. Заранее спасибо.

5

Решение

int(double) на самом деле это тип функции, а не указатель на функцию. Во многих случаях он распадается на функцию указателя, но не здесь. Вы не можете использовать sizeof с типом функции, например — и это жизненно важно для vectorРаспределитель.

Что касается вашей конкретной ошибки: add_pointer_t<int(double)> (более или менее это используется vectorитератор, внутренний или прямой) int(*)(double) и не может быть увеличен, потому что не имеет смысла выполнять такую ​​операцию.

6

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector