![]() |
|
Модераторы: 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" |
|||
|
||||
| sergioK1 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 417 Регистрация: 30.1.2011 Репутация: нет Всего: нет |
Это не я пихаю, а автор того примера, у Страуструпа я таких примеров не вижу, книга на 1100 страниц , что вообще дает такой стиль? это же нарушении ООP? Это чтоб специально показать работу лямды ? Когда параметр поинтер на функцию я еще понимаю, а лучше virtual protected или вообще pure virtual, я так делаю уже лет 10, не важно на каком языке, Как разьясняеться нормальный С++ vs то о чем известная фраза Линуса, |
|||
|
||||
| Lukkoye |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 86 Регистрация: 23.3.2013 Репутация: 1 Всего: 1 |
||||
|
||||
| baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 32 Всего: 101 |
sergioK1, вы пример не поняли, его автор не виноват. ваш код - не код примера.
оставим это на его совести впрочем с++ вам никто не навязывает... в чем же? это к ооп вообще не относится. кстати не оопом единым, с++ мультипарадигмный язык |
|||
|
||||
| sergioK1 |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 417 Регистрация: 30.1.2011 Репутация: нет Всего: нет |
В чем разница? Автор не приводит main функцию? http://www.cprogramming.com/c++11/c++11-lambda-closures.html это не автор написал шаблон? Я так не пишу нигде, хотя многие языки позволяют, Добавлено через 13 минут и 30 секунд
Я знаю две парадигмы is a и has a, до компиляции(шаблоны) и после, говорить можно много и не о чем но суть та же, Тот же Линус прекрасно пишет в стиле ООP, только не признает что это некая парадигма, |
||||
|
|||||
| baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 32 Всего: 101 |
автор не помещал функцию в функцию, его код корректен. да и никто вам ничего не навязывает. вы чего хотите то? понять и научиться или утвердиться что разные дураки пишут глупые статьи про использование ненужных фич с++?
|
|||
|
||||
| sergioK1 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 417 Регистрация: 30.1.2011 Репутация: нет Всего: нет |
Он не привел целого, работающего примера, который можно запустить и пройтись в дебаге, это меня сбило с толку, С++ он позволяет писать как угодно, в том числе и через одно место, я хочу понять как писать нормально как нет, где шаблоны нужны а где оверхед, есть такие нидь статьи толковые на эту тему? |
|||
|
||||
| Lukkoye |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 86 Регистрация: 23.3.2013 Репутация: 1 Всего: 1 |
Имхо, у этого автора низкое качество статей. Я бы не стал тратить на них своё время. Он, как и многие другие программисты допускает две классические ошибки: 1. Покажите как это используется. А потом объясните как это устроенно внутри. Вместо этого, автор перемешивает дизайн использования и реализацию, показывая и то и другое урывками. Получается шляпа. А все что нужно было - это рабочий main с комментариями. 2. Объясняют сабж, забывая о том, что собеседник не в теме. В итоге, правильно понять их могут только те люди, которые итак уже в теме. Но те, что в теме - им такие стать уже и не нужны, они итак материал знают. Итого: новички не осиливают ни использование, ни идею по таким унылым статьям. А для "бывалых морских волков" эти статьи не нужны. По поводу шаблонов, почитайте Александресску, и Джоссатиса. По поводу лямбд лучше почитать самого Страуструпа. Это сообщение отредактировал(а) Lukkoye - 6.7.2014, 12:51 |
|||
|
||||
| sergioK1 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 417 Регистрация: 30.1.2011 Репутация: нет Всего: нет |
А бывают только новички и матерые волки, средних нету |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |