Нашли или выдавили из себя код, который нельзя назвать нормальным,
на который без улыбки не взглянешь?
Не торопитесь его удалять или рефакторить, — запостите его на
говнокод.ру, посмеёмся вместе!
Батхертный путь C++
Просветление — состояние полной осознанности (выход за пределы дуального ума)... Это скачкообразное изменение восприятия окружающего мира, знаменующее собой переход к отличной от общепринятой форме мышления. Одновременно является началом открытия чакры «третьего глаза» и трамплином для глубоких изменений сознания. Как витальная форма, тяжело поддается ментальному описанию.
Батхертный путь C++ - путь, которым идут просветленные последователи Дао и Дзен С++, способные писать всё в одном выражении.
Доступность этого пути в C++ усиливает возможности C++ по созданию одного и того же кода самыми разнообразными и очень красивыми способами.
Следуя этому пути можно писать такой крутой код, что все товарищи из команды, работающие над кодом, над которым вы работаете вместе с ними, будут завидовать вам и бить вас за это при каждой встрече с разворота.
Этот принцип батхертного пути C++, лежащий в основе C++, помогает потратить дополнительные 1000% времени на разработку и поддержку C++ программ и получить за это дополнительные деньги. Поэтому C++ крайне выгоден!
Взглянем на малую часть основ этого пути при объявлении массивов и функций в C++:
Док-ва истинности пути к просветлению: http://ideone.com/FCW4f
Итак, используя эти простые принципы нужно написать массив функций, возвращающих массив функций с параметром функция, принимающая массив функций, возвращающих функцию void (void)? typedef запрещён.
Останется только один! Истинный просветленный носитель разума и света!
Если вы знаете другие основы батхертного пути C++, то искренне прошу поделиться с нами вашими открытыми чакрами.
Итак, используя эти простые принципы напишем массив указателей на функции, возвращающих массив указателей на функции с параметром указатель на функцию, принимающую массив указателей на функции, возвращающих указатель на функцию void (void)?
1) Указатель на функцию void (void):
void (*f)();
2) массив указателей на функции, возвращающих указатель на функцию void (void) в доме который построил Джек:
void (*(*[])())();
3) Указатель на функцию, принимающую массив указателей на функции, возвращающих указатель на функцию void (void):
void (*)(void (*(*[])())());
4) Массив указателей на функции с параметром указатель на функцию, принимающую массив указателей на функции, возвращающих указатель на функцию void (void)
void (*[]) (void (*)(void (*(*[])())()));[/code] 5) массив указателей на функции, возвращающих массив указателей на функции с параметром указатель на функцию, принимающую массив указателей на функции, возвращающих указатель на функцию void (void):
Дешифратором я и сам проверял, вот он и схавал возврат массива не по ссылке... А я даже не задумался об этом.
P.S. Если честно - в практике никогда не возникало даже желания вернуть сишный массив. Указатель на массив в куче, вектор какой-нибудь это часто. А массив ни разу.
И мне сишный массив по ссылке ни разу не понадобилось возвращать. За все время крестописания. Так что тоже не вижу в этом какого-либо смысла, тк нет контроля за временем жизни такого массива. Вот если однажды кресты научатся собирать мусор из &, то да. А пока это бесполезно. Темболее что у такого массива фиксированная длина. Ждем ещё более опытных товарищей.
единственный случай, когда это хоть как то может пригодиться - внутри в объекте хранится массив статической длины (типа my::array<int, 100>) и мы его пытаемся вернуть по ссылке, чтобы порадовать крестоблпринципиальную систему вывода типов
интересно, можно ли в таком классе определить оператор приведения к int[100] & ?
Я предположу, допусим авто скопирует массив переданный по ссылке. Но это будет страннно. При передаче структуры в качестве параметра в шаблонную функцию - она копируется, а при передачи массива - копируется только указатель на массив. Так вот при авто такое поведение не повторяется. что структура, что массив - скопируются.
>Батхертный путь C++
Кстати, похоже ОП пытался сделать отсылку к какой-то книге:
Читал я вроде какую-то книгу "Бархатный путь C++" или что-то подобное.
Да. С точки зрения архитектуры никаких технических проблем для возврата таких ссылок на массивы быть не может для языка. Сссылка - тот же указатель, так что даже на х86 влезет в eax без каких-либо проблем. Поэтому это в крестах и реализовали. Темболее что указатель на массив няшная сишка и раньше умела возвращать. Так что крестостандартизаторы просто сохранили старое поведение и для ссылок.
http://govnokod.ru/12064
Нельзя вот так вот взять и написать массив функций. Можно только массив указателей на функции.
1) Указатель на функцию void (void):2) массив указателей на функции, возвращающих указатель на функцию void (void) в доме который построил Джек:3) Указатель на функцию, принимающую массив указателей на функции, возвращающих указатель на функцию void (void):4) Массив указателей на функции с параметром указатель на функцию, принимающую массив указателей на функции, возвращающих указатель на функцию void (void)
void (*[]) (void (*)(void (*(*[])())()));[/code] 5) массив указателей на функции, возвращающих массив указателей на функции с параметром указатель на функцию, принимающую массив указателей на функции, возвращающих указатель на функцию void (void):Си - это просто 😉
P.S. Надеюсь нигде не ошибся.
Как-то так, но я уже ни в чем не уверен.
Я не понимаю что в этой всей теме написано, так что проверить тебя не могу. Ждем умных людей. Сорри.
Взялся за гуж, не говори, что не дюж.
http://cdecl.ridiculousfish.com
P.S. Если честно - в практике никогда не возникало даже желания вернуть сишный массив. Указатель на массив в куче, вектор какой-нибудь это часто. А массив ни разу.
>а разве можно?)
Дождались. А у меня между прочим вся надежда была на вас. :-[
единственный случай, когда это хоть как то может пригодиться - внутри в объекте хранится массив статической длины (типа my::array<int, 100>) и мы его пытаемся вернуть по ссылке, чтобы порадовать крестоблпринципиальную систему вывода типов
интересно, можно ли в таком классе определить оператор приведения к int[100] & ?
Думаю и к T[N]& (где T и N - шаблоны).
интересен синтаксис этого извращения
> auto
нет, скорее передача в
template <class T, size_t N>
void foo(T (&arg)[N]) { ... some code working with array[N]... }
auto без ссылки компилятором выведется как T * вместо T[N]
по очевидной причине - массивы нельзя присваивать, это не структуры
Это очевидно, но я с трудом могу представить себе, когда это реально нужно.
> чтобы порадовать крестоблпринципиальную систему вывода типов
auto? Вроде проблем быть не должно?
Кстати, похоже ОП пытался сделать отсылку к какой-то книге:
Читал я вроде какую-то книгу "Бархатный путь C++" или что-то подобное.
http://www.gamedev.ru/flame/forum/?id=156269
в разделе програмиррование
совсем искать разучился
Указатели на функции - это Си 🙂