HLFX.Ru Forum
профиль •  правила •  регистрация •  календарь •  народ •  FAQ •  поиск •  новое •  сутки •  главная •  выход  
HLFX.Ru Forum HLFX.Ru Forum > Наш форум > Технические вопросы > спор
xwider
Страницы (3): « 1 2 [3]   Предыдущая тема   Следующая тема
Автор
Тема Новая тема    Ответить
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 34547
Нанёс повреждений: 514 ед.
Возраст: 37

Рейтинг



Награды
 
[1 награда]


Цитата:
thambs писал:
в общем виде нереализуемо

Я не буду претендовать на красивые решения (над ними можно думать долго), но вот по-быстрому сделал общее решение:

C++ Source Code:
1
template<typename T,int unused>
2
class valueHolder {
3
public:
4
  valueHolder( T value ) : data( value ) {}
5
  operator T () { return data; }
6
private:
7
  T data;
8
};
9
 
10
template<typename T>
11
class quadraticValue {
12
public:
13
  quadraticValue( T value ) : data( value ) {}
14
  quadraticValue<T> operator +( quadraticValue<T> &other ) { return data + other.data; }
15
private:
16
  T data;
17
};
18
 
19
template<typename T>
20
class linearValue {
21
public:
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 ); }
25
private:
26
  T data;
27
};
28
 
29
typedef linearValue<valueHolder<float,1>> distance_t;
30
typedef quadraticValue<valueHolder<float,1>> area_t;
31
 
32
typedef linearValue<valueHolder<float,2>> weight_t;
33
typedef quadraticValue<valueHolder<float,2>> squaredWeight_t;
34
 
35
void foo( void )
36
{
37
  // компилится
38
  distance_t d1 = 1.0f;
39
  distance_t d2 = 2.0f;
40
  area_t a = d1 * d2;
41
 
42
  // компилится
43
  weight_t w1 = 1.0f;
44
  weight_t w2 = 2.0f;
45
  squaredWeight_t sw = w1 * w2;
46
 
47
  // не компилится
48
  area_t a2 = w1 * w2;
49
  squaredWeight_t a3 = d1 * d2;
50
}

__________________

Сообщить модератору | | IP: Записан
Сообщение: 127630

Старое сообщение 15-11-2013 12:44
-
thambs
мразь конченная

Дата регистрации: Mar 2006
Проживает: -
Сообщений: 6417

Рейтинг



XaeroX

не получится, ты ж не можешь произвольные сочетания distance^x weight^y time^z делать. о, во -- смотри что нашёл -- вроде в буусте такое есть http://www.boost.org/doc/libs/1_54_...imensionExample

__________________
http://www.moddb.com/mods/monorail-quest

Сообщить модератору | | IP: Записан
Сообщение: 127631

Старое сообщение 15-11-2013 12:57
- За что?
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 34547
Нанёс повреждений: 514 ед.
Возраст: 37

Рейтинг



Награды
 
[1 награда]


Да я знаю, что в буусте есть.
Я говорю о том, что если как следует подумать, можно и самому на шаблонах это реализовать.

__________________

Сообщить модератору | | IP: Записан
Сообщение: 127632

Старое сообщение 15-11-2013 13:00
-
thambs
мразь конченная

Дата регистрации: Mar 2006
Проживает: -
Сообщений: 6417

Рейтинг



XaeroX

ну шаблоны да, расовая штука, тут не поспоришь. жаль у меня у меня таки не было времени свою софтину на плюсах переписать, а то б эти буустовские штуки заюзал -- меньше б плюх лепил.

__________________
http://www.moddb.com/mods/monorail-quest

Сообщить модератору | | IP: Записан
Сообщение: 127635

Старое сообщение 15-11-2013 13:39
- За что?
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 32237
Нанёс повреждений: 392 ед.

Рейтинг



Цитата:
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'

Сообщить модератору | | IP: Записан
Сообщение: 127650

Старое сообщение 15-11-2013 15:35
-
thambs
мразь конченная

Дата регистрации: Mar 2006
Проживает: -
Сообщений: 6417

Рейтинг



Дядя Миша
ну вот мне и странно было, что через такую жопу надо делать..

в фортране это красиво сделали:

C++ Source Code:
1
outer: do i=1,100
2
inner: do j=1,1000
3
exit outer
4
enddo inner
5
enddo outer

так, в принципе, можно не только из циклов, но и из ifов и selectов выходить. по моему, очень удобно, меня несколько шокировало то, что в c-языках такой конструкции нет.

блин и ведь так всегда, в одном языке одни расовые вещи, а другом другие, а так что бы сразу всё -- хрен там.

__________________
http://www.moddb.com/mods/monorail-quest

Отредактировано thambs 15-11-2013 в 16:15

Сообщить модератору | | IP: Записан
Сообщение: 127657

Старое сообщение 15-11-2013 16:08
- За что?
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 34547
Нанёс повреждений: 514 ед.
Возраст: 37

Рейтинг



Награды
 
[1 награда]


thambs
То, что ты описал на фортране, как раз и решается с помощью goto.
Есть ещё вариант с sentinel цикла:

C++ Source Code:
1
bool sentinel = true;
2
for ( int i = 0; i < 100 && sentinel; ++i )
3
  for ( int j = 0; j < 1000 && sentinel; ++j ) {
4
    sentinel = false; break;
5
  }
6
}

__________________

Сообщить модератору | | IP: Записан
Сообщение: 127659

Старое сообщение 15-11-2013 16:41
-
PomanoB
Житель форума

Дата регистрации: Aug 2010
Проживает: (void)
Сообщений: 157

Рейтинг



Такое есть в JavaScript и, кажется, в джаве, выход по break и continue из вложенных циклов.
Но я боюсь, что со мной будет, если признаюсь в склонности к JavaScript'у

Сообщить модератору | | IP: Записан
Сообщение: 127660

Старое сообщение 15-11-2013 17:27
- За что?
nemyax
Нёмыч

Дата регистрации: Jul 2011
Проживает: (void)
Сообщений: 4139

Рейтинг



А что в C++ с каррированием и паттерн-матчингом, которые есть в демотиваторе? Тоже на шаблонах?

Сообщить модератору | | IP: Записан
Сообщение: 127666

Старое сообщение 15-11-2013 19:21
- За что?
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 34547
Нанёс повреждений: 514 ед.
Возраст: 37

Рейтинг



Награды
 
[1 награда]


nemyax
Каррирование на шаблонах, а паттерн-матчинг - ну, в принципе, тоже можно на них, но вроде бы можно и просто с помощью наследования реализовать. Или даже с помощью typeid.

__________________

Сообщить модератору | | IP: Записан
Сообщение: 127668

Старое сообщение 15-11-2013 19:31
-
nemyax
Нёмыч

Дата регистрации: Jul 2011
Проживает: (void)
Сообщений: 4139

Рейтинг



Цитата:
XaeroX писал:
Каррирование на шаблонах

Как это в коде хоть выглядит? =)

Сообщить модератору | | IP: Записан
Сообщение: 127669

Старое сообщение 15-11-2013 19:32
- За что?
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 34547
Нанёс повреждений: 514 ед.
Возраст: 37

Рейтинг



Награды
 
[1 награда]


Но вообще говоря С++ - не функциональный язык.
То есть, лично я люблю элементы функциональщины (и шаблоны), но в меру. Мне важна императивная составляющая и возможность комбинировать подходы. Это плюсы позволяют идеально.

Добавлено 16-11-2013 в 02:34:

Цитата:
nemyax писал:
Как это в коде хоть выглядит? =)

Бинды из STL в качестве простой иллюстрации подойдут?

__________________

Сообщить модератору | | IP: Записан
Сообщение: 127670

Старое сообщение 15-11-2013 19:34
-
nemyax
Нёмыч

Дата регистрации: Jul 2011
Проживает: (void)
Сообщений: 4139

Рейтинг



Цитата:
XaeroX писал:
Бинды из STL

Это получается полноценное частичное применение с канпеляцией промежуточных функций?

Сообщить модератору | | IP: Записан
Сообщение: 127671

Старое сообщение 15-11-2013 19:41
- За что?
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 34547
Нанёс повреждений: 514 ед.
Возраст: 37

Рейтинг



Награды
 
[1 награда]


nemyax
Пожалуй, да - только частично-применёнными будут не функции, а функторы (но это без разницы). Только это всё compile-time фичи, компилируется потом всё вместе.

Кстати, нашёл тут в википедии, что луа поддерживает замыкания (синтаксис такой же как у похапе), а вот петон, судя по всему, нет.

__________________

Сообщить модератору | | IP: Записан
Сообщение: 127676

Старое сообщение 16-11-2013 10:10
-
Тема: (Опционально)
Ваш ответ:



Переводчик транслита


[проверить длину сообщения]
Опции: Автоматическое формирование ссылок: автоматически добавлять [url] и [/url] вокруг интернет адресов.
Уведомление по E-Mail: отправить вам уведомление, если кто-то ответил в тему (только для зарегистрированных пользователей).
Отключить смайлики в сообщении: не преобразовывать текстовые смайлики в картинки.
Показать подпись: добавить вашу подпись в конец сообщения (только зарегистрированные пользователи могут иметь подписи).

Временная зона GMT. Текущее время 22:03. Новая тема    Ответить
Страницы (3): « 1 2 [3]   Предыдущая тема   Следующая тема
HLFX.Ru Forum HLFX.Ru Forum > Наш форум > Технические вопросы > спор
xwider
Версия для печати | Отправить тему по E-Mail | Подписаться на эту тему

Быстрый переход:
Оцените эту тему:

Правила Форума:
Вы not можете создавать новые темы
Вы not можете отвечать в темы
Вы not можете прикреплять вложения
Вы not можете редактировать ваши сообщения
HTML Код ВЫКЛ
vB Код ВКЛ
Смайлики ВКЛ
[IMG] Код ВКЛ
 

< Обратная связь - HLFX.ru >

На основе vBulletin
Авторское право © 2000 - 2002, Jelsoft Enterprises Limited.
Дизайн и программирование: Crystice Softworks © 2005 - 2024