![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| sergioK1 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 417 Регистрация: 30.1.2011 Репутация: нет Всего: нет |
компилирую g++ -std=c++11 main.cpp получаю D:\C++\Test\main.cpp|34|error: a function-definition is not allowed here before '{' token| взято с гугла, что не хватает? |
|||
|
||||
| NoviceF |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 313 Регистрация: 13.3.2012 Где: Ростов-на-Дону Репутация: нет Всего: 2 |
||||
|
||||
| sergioK1 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 417 Регистрация: 30.1.2011 Репутация: нет Всего: нет |
Вот я и не понимаю http://www.cprogramming.com/c++11/c++11-lambda-closures.html приводятся ошибочные примеры? или как? |
|||
|
||||
| volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 37 Всего: 85 |
Где вы там увидели определение функции в теле другой функции? |
|||
|
||||
| sergioK1 |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 417 Регистрация: 30.1.2011 Репутация: нет Всего: нет |
Это NoviceF увидел Я же вижу что примеры не компилируються, флаг на С++11 я ставлю в чем причина? |
||||
|
|||||
| sQu1rr |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 597 Регистрация: 11.11.2008 Где: london Репутация: 3 Всего: 13 |
||||
|
||||
| volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 37 Всего: 85 |
||||
|
||||
| Lukkoye |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 86 Регистрация: 23.3.2013 Репутация: 1 Всего: 1 |
Выдержка вашего кода не является примером из указанной ссылки. Вы не правильно поняли материал. И не правильно его воспроизвели. Ваш код содержит синтаксическую ошибку: нельзя создавать локальные функцию внутри другой функции. |
|||
|
||||
| sergioK1 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 417 Регистрация: 30.1.2011 Репутация: нет Всего: нет |
OK , понял, автор не приводит цельный код, что сильно осложняет понимание, Что то мне такой стиль написания кажеться сильно перекрученным, зачем там шаблон, когда ясно оно только для стрингов? и что мешает написать отдельную функцию для проверки и сделать ее виртуальной для возможной перегрузки в будущем, или по сишному через указатель, Сама по себя лямда вещь красивая, но чреватая трудностями в отладке, Или я чего не вижу? |
|||
|
||||
| volatile |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 37 Всего: 85 |
Там же есть ответ на ваш вопрос
с лямбдой удобней. Код появляется там где нужно, без определения дополнительных функций, неизвестно где расположенных. (которым еще и названия придумывать надо,
лямбда не только (и даже не столько) красивая, сколько удобная. А трудности при отладке - вещь субъективная. С опытом трудностей будет меньше. |
||||
|
|||||
| sergioK1 |
|
||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 417 Регистрация: 30.1.2011 Репутация: нет Всего: нет |
вот такой записи я не понимаю,
что такая функция принимает? поинтер на другую функцию которая принимает что? и что возвращает? |
||||||
|
|||||||
| volatile |
|
||||||||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 37 Всего: 85 |
Вы привели слишком маленький отрывок, чтобы что-то сказать Это шаблон. и если судить только по этому отрывку, не зная ничего более, то здесь Func = это произвольнй тип, не обязательно функция. несмотря на название Если взять отрывок побольше
то Func - это любой тип имеющий operator(std::string) возвращающий что либо, приводящееся к bool короче любой тип, при записи которого, строчка
не вызовет синтаксич. ошибок например функция:
Или например
тоже формаьно подойдет, ну и т.д. Или например произольный тип, скажем такой:
тоже не вызовет синт. ошибок. Я специально не показывал лямбды (они есть в статье) поскольку у вас проблемы с пониманием того, что существуют в языке уже давно, и к нововведеням С++11 не имеет отношения. Это сообщение отредактировал(а) volatile - 4.7.2014, 20:24 |
||||||||||||
|
|||||||||||||
| baldina |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 32 Всего: 101 |
что угодно, выглядящее как функция; то, с чем можно обходиться так
это может быть функция, лямбда-функция или функциональный объект, т.е. имеющий operator()() вообще findMatchingAddresses это не функция, а шаблон функции (template). функцию создаст компилятор, когда встретит вызов. по вызову будет понятно, с каким конкретным типом параметра создавать. Добавлено через 1 минуту и 16 секунд уже volatile ответил) |
||||
|
|||||
| sergioK1 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 417 Регистрация: 30.1.2011 Репутация: нет Всего: нет |
Да для меня С++ это new вместо mallос, cout вместо prinf и классы вместо структур, вектор вместо realloc,шаблоны вместо макро, хотя макро нужны там где они нужны , друзья , операторы и простые шаблоны, т,е уровень где-то 2002года , Это только одна часть Посоветуйте где взять "другую" туториал для начинающих мне не годиться, нужно что-то посерьезней (лямды потом сами станут понятны), стандарт для меня пока сложноват, програмировать я умею мне нужно имеено язык с нюансами, и пониманием сути имеено как С++ а не "как жава без GC и доступом к памяти" В гугле полно мусора |
|||
|
||||
| baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 32 Всего: 101 |
sergioK1, вы пихаете функцию в функцию и удивляетесь. думаю все-же нужен туториал для начинающих. возьмите любую толстую книжку - страуструп, лафоре, прата
для понимания функционального стиля и шаблонов подойдет эта книга по bgl. и вообще серия "C++ in Depth" |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |