0

我试图从一个对象存储一个成员函数,以便在发生适当事件时调用它。不幸的是,这段代码给出了很多错误信息。有谁能够帮助我?

class MainPage
{
public:

    MainPage::MainPage(void)
    {
        image1 = new STImagePanel("Untitled.png");
        image1->OnPointerPressedHandler->add(&MainPage::imageMousePressed,this);
    }

    void MainPage::imageMousePressed(STObject* sender, STPointerEventArg * args)
    {
        MainPage * dsda = (MainPage*)this;
        pres = true;
    }

};


template<class SENDERTYPE, class ARG>
struct callbackInfo
{
    boost::function<void(SENDERTYPE, ARG)> func;
};

template<class SENDERTYPE, class ARG>
class STEventHandler
{
public:
    template<class T, class P>
    void add(T x, P that)
    {
        //The following line gives the error
        callbackInfo<SENDERTYPE,ARG> tmp { boost::bind(x,that,_2)};  
        functions->addLast(tmp);
    }

private:
    STLinkedList<callbackInfo<SENDERTYPE,ARG>>* functions;
}

这会产生以下错误:

http://pastie.org/8014181

更新:通过以下更正,它可以正常工作:

template<class T, class P>
void add(T x, P that)
{
    boost::function<void(SENDERTYPE,ARG)> func(boost::bind(x,that,_1,_2));
    callbackInfo<SENDERTYPE,ARG> tmp;
    tmp.func = func;
}
4

2 回答 2

0

我看到的一个问题MainPage::imageMousePressed(STObject* sender, STPointerEventArg * args)有两个参数,但是在对 的调用中boost::bind,您只是将 _2 绑定到发件人。那是行不通的。您必须同时绑定两者,或者传递 NULL 或一些哨兵值。

更一般地说,在我看来你正在重新发明boost::signals

于 2013-06-06T11:10:18.573 回答
0

两个建议:

1)在您没有显示第一条错误消息的代码中,可能阻止了某些标头包含;

2) 您在类 MainPage 定义的末尾缺少分号。

于 2013-06-06T11:11:15.397 回答