HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- Технические вопросы (https://hlfx.ru/forum/forumdisplay.php?forumid=20)
-- спор (https://hlfx.ru/forum/showthread.php?threadid=4164)
Отправлено XaeroX 15-11-2013 в 12:44:
Цитата:
thambs писал:
в общем виде нереализуемо
Я не буду претендовать на красивые решения (над ними можно думать долго), но вот по-быстрому сделал общее решение:
C++ Source Code:
1 | template<typename T,int unused> |
4 | valueHolder( T value ) : data( value ) {} |
5 | operator T () { return data; } |
13 | quadraticValue( T value ) : data( value ) {} |
14 | quadraticValue<T> operator +( quadraticValue<T> &other ) { return data + other.data; } |
22 | linearValue( T value ) : data( value ) {} |
23 | linearValue<T> operator +( linearValue<T> &other ) { return linearValue<T>( data + other.data ); } |
24 | quadraticValue<T> operator *( linearValue<T> &other ) { return quadraticValue<T>( data * other.data ); } |
29 | typedef linearValue<valueHolder<float,1>> distance_t; |
30 | typedef quadraticValue<valueHolder<float,1>> area_t; |
32 | typedef linearValue<valueHolder<float,2>> weight_t; |
33 | typedef quadraticValue<valueHolder<float,2>> squaredWeight_t; |
45 | squaredWeight_t sw = w1 * w2; |
49 | squaredWeight_t a3 = d1 * d2; |
__________________
Отправлено thambs 15-11-2013 в 12:57:
XaeroX
не получится, ты ж не можешь произвольные сочетания distance^x weight^y time^z делать. о, во -- смотри что нашёл -- вроде в буусте такое есть http://www.boost.org/doc/libs/1_54_...imensionExample
__________________
http://www.moddb.com/mods/monorail-quest
Отправлено XaeroX 15-11-2013 в 13:00:
Да я знаю, что в буусте есть.
Я говорю о том, что если как следует подумать, можно и самому на шаблонах это реализовать.
__________________
Отправлено thambs 15-11-2013 в 13:39:
XaeroX
ну шаблоны да, расовая штука, тут не поспоришь. жаль у меня у меня таки не было времени свою софтину на плюсах переписать, а то б эти буустовские штуки заюзал -- меньше б плюх лепил.
__________________
http://www.moddb.com/mods/monorail-quest
Отправлено Дядя Миша 15-11-2013 в 15:35:
Цитата:
XaeroX писал:
Если же красота кода мало заботит, то goto - прекрасный оператор для выхода из цикла любой вложенности. При этом этот оператор соответствует нативным машинным командам, т.е. не является сколько-нибудь вычислительно затратным.
Я даже больше скажу. Именно поэтому от нас её всячески прячут и нерекомендуют использовать, поскольку goto ломает к чертям все слои абстракции. Особенно на С++. На Си еще небольшая беда, если вы из функции выпрыгнете. А если из приватного члена класса?__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено thambs 15-11-2013 в 16:08:
Дядя Миша
ну вот мне и странно было, что через такую жопу надо делать..
в фортране это красиво сделали:
C++ Source Code:
так, в принципе, можно не только из циклов, но и из ifов и selectов выходить. по моему, очень удобно, меня несколько шокировало то, что в c-языках такой конструкции нет.
блин и ведь так всегда, в одном языке одни расовые вещи, а другом другие, а так что бы сразу всё -- хрен там.__________________
http://www.moddb.com/mods/monorail-quest
Отправлено XaeroX 15-11-2013 в 16:41:
thambs
То, что ты описал на фортране, как раз и решается с помощью goto.
Есть ещё вариант с sentinel цикла:
C++ Source Code:
2 | for ( int i = 0; i < 100 && sentinel; ++i ) |
3 | for ( int j = 0; j < 1000 && sentinel; ++j ) { |
4 | sentinel = false; break; |
__________________
Отправлено PomanoB 15-11-2013 в 17:27:
Такое есть в JavaScript и, кажется, в джаве, выход по break и continue из вложенных циклов.
Но я боюсь, что со мной будет, если признаюсь в склонности к JavaScript'у 
Отправлено nemyax 15-11-2013 в 19:21:
А что в C++ с каррированием и паттерн-матчингом, которые есть в демотиваторе? Тоже на шаблонах?
Отправлено XaeroX 15-11-2013 в 19:31:
nemyax
Каррирование на шаблонах, а паттерн-матчинг - ну, в принципе, тоже можно на них, но вроде бы можно и просто с помощью наследования реализовать. Или даже с помощью typeid.
__________________
Отправлено nemyax 15-11-2013 в 19:32:
Цитата:
XaeroX писал:
Каррирование на шаблонах
Как это в коде хоть выглядит? =)
Отправлено XaeroX 15-11-2013 в 19:34:
Но вообще говоря С++ - не функциональный язык.
То есть, лично я люблю элементы функциональщины (и шаблоны), но в меру. Мне важна императивная составляющая и возможность комбинировать подходы. Это плюсы позволяют идеально.
Добавлено 16-11-2013 в 02:34:
Цитата:
nemyax писал:
Как это в коде хоть выглядит? =)
Бинды из STL в качестве простой иллюстрации подойдут? 
__________________
Отправлено nemyax 15-11-2013 в 19:41:
Цитата:
XaeroX писал:
Бинды из STL
Это получается полноценное частичное применение с канпеляцией промежуточных функций?
Отправлено XaeroX 16-11-2013 в 10:10:
nemyax
Пожалуй, да - только частично-применёнными будут не функции, а функторы (но это без разницы). Только это всё compile-time фичи, компилируется потом всё вместе.
Кстати, нашёл тут в википедии, что луа поддерживает замыкания (синтаксис такой же как у похапе), а вот петон, судя по всему, нет.
__________________