C ++ создание делегатов - PullRequest
2 голосов
/ 08 марта 2011

Мне было интересно, есть ли способ имитировать это поведение делегата (из C #) в C ++

new ModifyTargetingStatus("Reversal", "Reverses physical attacks back at the user", -1, new List<CALL_CONDITION>(){CALL_CONDITION.Targetted}, attemptChange: delegate(CharacterMove move, BattleCharacter[] users, ref BattleCharacter[] targets, BattleCharacter holder, BattleField field)
                {
                    if (targets != null && targets.Length == 1 && targets[0] == holder &&
                        (move.MoveClass == MOVE_CLASS.MC_BASIC_ATTACK ||
                        move.MoveClass == MOVE_CLASS.MC_STACKED_ATTACK) &&
                        !move.MoveFlags.Contains(MOVE_FLAG.MF_UNREFLECTABLE))
                    {
                        targets = users;
                        move.Reflected = true;
                        return true;
                    }
                    return false;
                })

Я посмотрел на boost :: function и boost :: bind и статью о FastDelegates по проекту кода, но все они, похоже, требуют, чтобы вы определили функцию где-то еще, а затем привязали ее. Я хотел бы иметь возможность предоставить функцию при создании объекта, если это возможно

Заранее спасибо

Ответы [ 2 ]

3 голосов
/ 08 марта 2011

Они называются анонимными функциями (лямбда-выражениями) и не поддерживаются в C ++.Из статьи википедии : «Анонимные функции были добавлены в язык C ++ начиная с C ++ 0x

0 голосов
/ 09 марта 2011

C ++ (и C) используют указатели на функции вместо делегатов.Указатели, в отличие от ссылок, могут иметь нулевое значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...