- 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
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
template<typename T1, typename T2, size_t OFFSET = 8>
struct EnumMult
{
template<T1 t1, T2 t2>
struct Static
{
static const size_t V = (t1 << OFFSET) | t2;
};
static size_t Dynamic(T1 t1, T2 t2)
{
return (t1 << OFFSET) | t2;
}
};
// example
#include <iostream>
enum Suit
{
SPADES,
CLUBS,
DIAMONDS,
HEARTS
};
enum Value
{
SEVEN,
EIGHT,
NINE,
TEN,
JACK,
QUEEN,
KING,
ACE
};
int main()
{
typedef EnumMult<Suit, Value> CardMult;
switch (CardMult::Dynamic(CLUBS, SEVEN))
{
case CardMult::Static<SPADES, ACE>::V:
std::cout << "ACE OF SPADES";
break;
case CardMult::Static<CLUBS, SEVEN>::V:
std::cout << "HOOK";
break;
default:
std::cout << "NOTHING SPECIAL";
}
std::cout << std::endl;
return 0;
}
Понадобилось обработать два enum'а конструкцией switch-case, подумал, что было бы круто сделать квадратный свитч-кейс, но пришла и другая идиотская идея: шаблон для декартова умножения двух енумов. Заранее извините, если паттерн известный.
Fai 08.07.2012 05:41 # +6
vercetti 08.07.2012 10:11 # 0
Fai 08.07.2012 10:18 # +3
HaskellGovno 08.07.2012 10:35 # +1
Боян.
HaskellGovno 08.07.2012 10:37 # 0
std::*map?
rat4 08.07.2012 11:09 # +1
roman-kashitsyn 08.07.2012 11:12 # +4
Fai 08.07.2012 05:46 # 0
switch-case-table
Lure Of Chaos 08.07.2012 09:01 # 0
TarasB 08.07.2012 11:21 # +1
> static size_t Dynamic(T1 t1, T2 t2)
Ну вы поняли, на какой недостаток крестошаблонов я намекаю и на какой язык, в котором этого недостатка нет.
Fai 08.07.2012 22:00 # 0
TarasB 08.07.2012 23:43 # 0
Fai 09.07.2012 05:35 # −1
TarasB 08.07.2012 11:23 # +2
Lure Of Chaos 08.07.2012 11:58 # +1
какой битор!
побитовое ИЛИ же
bormand 08.07.2012 12:07 # +6
TarasB 08.07.2012 13:43 # 0
HaskellGovno 10.07.2012 12:34 # +12
3.14159265 10.07.2012 13:27 # +6
Lure Of Chaos 13.07.2012 01:06 # +3
eth0 13.07.2012 15:24 # +2
bormand 08.07.2012 12:27 # +3
roman-kashitsyn 08.07.2012 13:40 # +2
HaskellGovno 09.07.2012 00:48 # +1
roman-kashitsyn 09.07.2012 00:54 # +2
>> )
Уж я то знаю, каким pattern matching должнен быть на самом деле.
HaskellGovno 09.07.2012 01:23 # +2
Fai 08.07.2012 22:01 # +2
vercetti 08.07.2012 23:17 # 0
HaskellGovno 09.07.2012 00:50 # 0
qt? ide от qt can not into auto и и прочие прелести
bormand 09.07.2012 05:22 # 0
Qt Creator 2.5.0: "Improved support of C++11 (nullptr, constexpr, static_assert, noexcept, inline namespaces, auto, lambdas)". А auto, к слову, уже давно подсвечивал.
HaskellGovno 09.07.2012 17:19 # +2
>auto
Научился в вывод типа переменной? Раньше типы для авто переменных не мог подсвечивать.
А на лямбды ругался, мол непонятная хренотень.
bormand 09.07.2012 18:58 # 0
Частично - выводит простые, нешаблонные типы. В шаблонных теряется.
> А на лямбды ругался, мол непонятная хренотень.
Как на говно на лямбды уже не смотрит, но аргументы внутри тела подсказать пока не осиливает.
HaskellGovno 10.07.2012 10:59 # 0
Есть форич for(:) и одновременно std::for_each. При этом в последнем приходится указывать тип аргумента лямбды, а в первом автовывод. А тот же std::find_if, который используется чуть ли не чаще - лишен своей конструкции с автовыводом.
defecate-plusplus 10.07.2012 11:35 # −1
в любом случае, вместо наконец-то можно будет да и в тех случаях, когда нет готовой уже функции, покрывающей тело цикла, любой серьезный for предпочтительней, чем for_each с громоздкой лямбдой внутри
ну а в find_if разве нужна какая то дополнительная конструкция?
HaskellGovno 10.07.2012 12:31 # +1
Как высокоуровневая замена (HOF) циклу в частых частных случаях.
defecate-plusplus 10.07.2012 12:43 # −1
грешно это
HaskellGovno 10.07.2012 18:14 # +1
для гарантированно маленьких n - нет
грешно втыкать хеш_мап там, где линейный поиск быстрее и эффективнее по памяти
HaskellGovno 10.07.2012 10:49 # 0
bormand 10.07.2012 13:30 # 0
TheCalligrapher 10.07.2012 02:15 # +3
Например, реализуй-ка нумерацию типа той, которая используется для доказательства счетности множества рациональных чисел :)
bormand 10.07.2012 06:39 # +3
http://ideone.com/fX4cC
HaskellGovno 10.07.2012 10:40 # 0
bormand 10.07.2012 14:14 # +5
0 2 5 9
1 4 8
3 7
6
Затем записал формулу для чисел в первой строке - (x*x+3*x)/2. Заметим, что по вертикали к числам первой строки прибавляются x+1, x+2, x+3 и т.п. Поэтому, воспользовавшись формулой для суммы арифметической прогрессии, число, стоящее в ячейке (x, y) можно записать как
(2*(x+1)+y-1)*y/2 + (x*x+3*x)/2. Что после упрощения превратится в ((x+y)^2+y+3*x)/2 или (x+y)*(x+y+1)/2 + x.
guest 10.07.2012 18:53 # 0
Очень похоже на jpeg zigzag. Но речь же шла о другом.
bormand 10.07.2012 19:04 # 0
"Круто было бы, если бы ты сделал нумерацию, которой заранее не нужно знать, сколько там будет вариантов по каждому измерению ... skipped ... Например, реализуй-ка нумерацию типа той, которая используется для доказательства счетности множества рациональных чисел"
Разве это не реализация подобной нумерации?
guest 10.07.2012 19:32 # 0
Честно говоря мне непонятен именно пост TheCalligrapher.
Вопрос: этот зигзаг - основное требование или просто интересный побочный эффект.
bormand 10.07.2012 19:53 # 0
Вот только практической пользы тут не так и много. Числа в машинном представлении ограничены ;(
guest 10.07.2012 20:13 # 0
Спираль наверное лучший вариант.
Вот еще. Jpeg-зигзаг идет змейкой и потому там гораздо трудней его перемешать правильно, ибо нет такой формулы.
bormand 10.07.2012 20:23 # +1
Заполнение то последовательное, но т.к. мы используем квадрат или прямоугольник (тема началась с того, как занумеровать декартово произведение двух енумов), некоторые числа, не попавшие в него, просто не будут использоваться.
> Спираль наверное лучший вариант.
Согласен.
> Jpeg-зигзаг идет змейкой
Да-да... Я его для случая 8х8 то еле-еле реализовал, когда писал велосидекодер jpeg.
vercetti 10.07.2012 21:56 # 0
guest 10.07.2012 20:18 # 0
http://upload.wikimedia.org/wikipedia/commons/thumb/4/43/JPEG_ZigZag.svg/220px-JPEG_ZigZag.svg.png
bormand 10.07.2012 06:47 # 0
http://ideone.com/oCPgk
vercetti 10.07.2012 22:09 # 0
bormand 11.07.2012 11:10 # 0
Но тогда метод будет выдавать только четные числа. Или я не так понял вашу идею?
vercetti 11.07.2012 19:27 # 0
bormand 10.07.2012 07:12 # 0
http://ideone.com/0IOHl
guest 10.07.2012 18:57 # +1
guest 10.07.2012 19:10 # +2
http://ideone.com/5CbfA
bormand 10.07.2012 19:21 # +1
guest 10.07.2012 19:29 # 0
По аналогии со спиралью улама.
OTK_Anusov 25.08.2021 19:30 # 0