Re: шаблонный параметр в std::function
От: rg45 СССР  
Дата: 30.05.11 07:23
Оценка: 4 (3) +1
Здравствуйте, Fedor Sumkin, Вы писали:

FS>Почему сейчас код работает(gcc 4.5.1), а если раскомментировать доп. блоки не будет работать?

FS>
FS>//...
FS>void bar(double(double) f, double p1)
FS>//...
FS>


Потому, что неправильно объявлен первый формальный параметр функции bar. Правильно так
void bar(double f(double), double p1);


После этого исправления программа компилируется и выполняется успешно: http://ideone.com/Y6Rcx.

FS>Как такое возможно(особенно запись double(double)) и как такое соотносится с компиляторами и стандартом?


Нормальная запись, которая обозначает тип функции с одним параметром типа double и типом возвраемого значения double. Запись double(double) — это "голый" тип, без идентификатора. Добавлять идентификатор, если он понадобится, в этом случае нужно не в конец записи, а перед скобкой: double foo(double);

Только нужно учитывать, что параметры-функции по стандарту автоматически трактуются компилятором как указатели на функции. Следующие объявления эквивалентны:
void bar(double f(double), double p1);
void bar(double (*f)(double), double p1);
--
Справедливость выше закона. А человечность выше справедливости.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.