2011-03-08 87 views
2

我在想,如果那里有一个方法来模仿(从C#)在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 ::功能和boost ::绑定和有关FastDelegates的文章在代码项目上,但他们似乎都要求你在其他地方定义函数然后绑定到它。我希望能够提供在创建对象如果可能的话

由于功能提前

+0

您使用的是C++ 0x吗? – 2011-03-08 19:58:09

+0

Im使用MSVC 2010/boost – Megatron 2011-03-08 20:00:24

+0

2010支持足够的C++ 0x来执行lambdas。有关详细信息,请参阅以下内容:http://en.wikipedia.org/wiki/C%2B%2B0x#Lambda_functions_and_expressions – luke 2011-03-08 20:02:49

回答

3

这些被称为匿名函数(lambda表达式),并在C++中不支持。从wikipedia article“从C++0x开始,将匿名函数添加到C++语言中。”

+2

+1,也被称为lambdas。 – luke 2011-03-08 20:00:45

0

C++(和C)使用函数指针而不是委托。与引用不同,指针可以为它们分配一个空值。