+11
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
int a[4]={};
void f(void){}
void functionWithArrayParam(int (&a)[4])
{
a[3]=4;
}
void functionWithFunctionParam(void (*f)(void))
{
f();
};
int (&functionReturnArray(void))[4]
{
return a;
}
void (*arrayOfFunction[4])(void)={f,f,f,f};
void (*functionReturnFunction(void))(void)
{
return f;
};
int main() {
functionReturnArray()[3]=4;
functionWithArrayParam(a);
arrayOfFunction[3]();
functionWithFunctionParam(f);
functionReturnFunction()();
Батхертный путь C++
Просветление — состояние полной осознанности (выход за пределы дуального ума)... Это скачкообразное изменение восприятия окружающего мира, знаменующее собой переход к отличной от общепринятой форме мышления. Одновременно является началом открытия чакры «третьего глаза» и трамплином для глубоких изменений сознания. Как витальная форма, тяжело поддается ментальному описанию.
Батхертный путь C++ - путь, которым идут просветленные последователи Дао и Дзен С++, способные писать всё в одном выражении.
Доступность этого пути в C++ усиливает возможности C++ по созданию одного и того же кода самыми разнообразными и очень красивыми способами.
Следуя этому пути можно писать такой крутой код, что все товарищи из команды, работающие над кодом, над которым вы работаете вместе с ними, будут завидовать вам и бить вас за это при каждой встрече с разворота.
Этот принцип батхертного пути C++, лежащий в основе C++, помогает потратить дополнительные 1000% времени на разработку и поддержку C++ программ и получить за это дополнительные деньги. Поэтому C++ крайне выгоден!
Взглянем на малую часть основ этого пути при объявлении массивов и функций в C++:
Док-ва истинности пути к просветлению:
http://ideone.com/FCW4f
Итак, используя эти простые принципы нужно написать массив функций, возвращающих массив функций с параметром функция, принимающая массив функций, возвращающих функцию void (void)? typedef запрещён.
Останется только один! Истинный просветленный носитель разума и света!
Если вы знаете другие основы батхертного пути C++, то искренне прошу поделиться с нами вашими открытыми чакрами.
Запостил:
LispGovno,
06 Ноября 2012
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
в разделе програмиррование
совсем искать разучился
Указатели на функции - это Си :)