使用boost创建C ++委托

时间:2011-03-13 22:31:18

标签: c++ boost

我在这里问了一个类似的问题C++ delegate creation但是我需要用新的限制来做这件事。我会很快重申这个问题

我想知道在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;
                })

我需要能够在不使用C ++ 0x的情况下执行此操作,因为我坚持使用gcc版本并不支持C ++ 0x lambdas。我有可用的增强库,但是我正在进入它,所以我无法弄清楚如何专门做这个。

提前感谢您的帮助

2 个答案:

答案 0 :(得分:0)

任何一个库都应该用于创建未命名的函数。

请参阅this question,请注意有一天这两个库将合并。

答案 1 :(得分:0)

boost::bind是此问题的常用解决方案。有关详细信息,请参阅其文档。