在计划中使用std :: function

时间:2014-01-13 08:46:48

标签: c++ cocos2d-x

我使用cocos2d-x一段时间了,有一个问题一直让我感到无聊: 我希望延迟按计划执行诸如“void f(int a)”之类的功能。但对于cocos2d-x,它无法在堆栈上传递变量:

int a = 10; //在延迟时调用f(a)

当然我可以使用CCInteger,CCxxx,但这样做太痛苦了。它只是cocos2d的副本,在cpp中真的很麻烦。

那么,是否有一种简单的方法让它执行std :: bind(f,a)?

2 个答案:

答案 0 :(得分:0)

Cocos2d-x 3.0已经进入测试版 - 它支持c ++ 11,你可以在日程安排方法中使用lambda表达式 - 这里有一个非常全面的教程:http://www.cprogramming.com/c++11/c++11-lambda-closures.html

无论如何:使用CCInteger或其他cocos类传递数据的痛苦是什么?他们的目的是为了做到这一点。你到底想要达到什么目的?也许传递整个节点会是一个更好的主意吗?

答案 1 :(得分:0)

你可以试试c ++ 11的功能,这是我自己的代码:

定义CallbackHelper类

class CallbackHelper : public CCObject
{
private:
    std::function<void ()> _func;
public:
    static CallbackHelper* create(std::function<void ()> func) {
    CallbackHelper* ret = new CallbackHelper();
    if (ret) {
        ret->autorelease();
    } else {
        CC_SAFE_DELETE(ret);
    }
        ret->_func = func;
        return ret;
    }
    void run() {
        _func();
    }    
};

制作CCCallFunC:

int a = 10;
CallbackHelper* callback = CallbackHelper::create([a](){
    cout<<a<<endl;
});
CCCallFunc::create(callback, callfunc_selector(CallbackHelper::run));

祝你好运