Форум программистов, компьютерный форум CyberForum.ru

Разобрать строку кода - C++

Восстановить пароль Регистрация
 
QWAN
56 / 55 / 1
Регистрация: 02.09.2008
Сообщений: 181
12.08.2014, 18:16     Разобрать строку кода #1
Часть программы, если что
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
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
56
57
58
59
60
61
62
// Game engine
struct Piece
{
    struct { unsigned short s[4]; } shape;
    int x : 8, y : 8, color : 14;
    unsigned r : 2;
 
    template<typename T> // walkthrough operator
    bool operator>(T it) const
    {
        for (int q = shape.s[r], p = 1, by = 0; by<4; ++by)
        for (int bx = 0; bx<4; ++bx, p <<= 1)
        if ((q&p) && it(x + bx, y + by)) return true;
        return false;
    }
    template<typename T> // transmogrify operator
    Piece operator*(T it) const { Piece res(*this); it(res); return res; }
};
 
template<bool DoDraw>
struct TetrisArea
{
    int Area[Height][Width];
    unsigned RenderX;
    unsigned n_full, list_full, animx;
    unsigned long timer;
    struct { ccrVars; } cascadescope;
public:
    TetrisArea(unsigned x = 0) : RenderX(x) { }
 
    bool Occupied(int x, int y) const
    {
        return x<1 || (x>Width - 2) || (y >= 0 && (Area[y][x] & Occ));
    }
 
    template<typename T>
    void DrawRow(unsigned y, T get)
    {
        for (int x = 1; x<Width - 1; ++x) DrawBlock(x, y, get(x));
    }
 
    bool TestFully(unsigned y, bool state) const
    {
        for (int x = 1; x<Width - 1; ++x) if (Occupied(x, y) != state) return false;
        return true;
    }
 
    void DrawBlock(unsigned x, unsigned y, int color)
    {
        if (x < (unsigned)Width && y < (unsigned)Height) Area[y][x] = color;
        if (DoDraw) VidMem[y*VidWidth + x + RenderX] = color;
    }
 
    void DrawPiece(const Piece& piece, int color)
    {
        piece>[=](int x, int y)->bool { if (y >= 0) this->DrawBlock(x, y, color); return false; };
    }
 
    bool CollidePiece(const Piece& piece) const
    {
        return piece>[=](int x, int y) { return this->Occupied(x, y); };
    }
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Тамика
Котовчанин
 Аватар для Тамика
859 / 439 / 129
Регистрация: 16.02.2010
Сообщений: 2,537
Записей в блоге: 27
12.08.2014, 18:18     Разобрать строку кода #2
(facepalm)
Это шутка?
Мы должны в этом разбираться?
Будьте добры, оформите код ЧИТАБЕЛЬНО.
По строкам и используя теги.
QWAN
56 / 55 / 1
Регистрация: 02.09.2008
Сообщений: 181
12.08.2014, 18:22  [ТС]     Разобрать строку кода #3
Интересует строка 56 и 61, хотя бы что означает
piece>[=]
0x10
2425 / 1597 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
12.08.2014, 18:25     Разобрать строку кода #4
Это надо было так извратиться.
Для Piece перегружен оператор>. Т.е. первым аргументом он принимает сам объект Piece, вторым - функтор. В 61 строке этот функтор записан как лямбда, которая для переданных X и Y проверяет занятость "куска".

В смысл того, что происходит в операторе > я не вдавался.
Тамика
Котовчанин
 Аватар для Тамика
859 / 439 / 129
Регистрация: 16.02.2010
Сообщений: 2,537
Записей в блоге: 27
12.08.2014, 18:37     Разобрать строку кода #5
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Всё, что после > - это нововведение в С++ 11. Лямбда-функции.
http://ru.cppreference.com/w/cpp/language/lambda
QWAN
56 / 55 / 1
Регистрация: 02.09.2008
Сообщений: 181
12.08.2014, 18:46  [ТС]     Разобрать строку кода #6
Спасибо, а то никак не мог эту строки понять. До лямбда-функций в С++ 11 пока не дошел.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.08.2014, 18:47     Разобрать строку кода
Еще ссылки по теме:

C++ Разобрать блок приведенного кода
Не могу разобрать часть кода. Функция strtok C++
Разобрать строку кода C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Тамика
Котовчанин
 Аватар для Тамика
859 / 439 / 129
Регистрация: 16.02.2010
Сообщений: 2,537
Записей в блоге: 27
12.08.2014, 18:47     Разобрать строку кода #7
Просвещайся, сын мой.
Yandex
Объявления
12.08.2014, 18:47     Разобрать строку кода
Ответ Создать тему
Опции темы

Текущее время: 05:35. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru