从成员函数数组访问成员函数

时间:2012-11-14 00:19:20

标签: c++ arrays function pointers member

我已将几个成员函数分组到一个数组中。如何从阵列中访问函数?我得到'错误C2064:术语不评估为一个带0个参数的函数。'见下文。

class A
{
public:

    //Constructor
    A()
    {
        //Fill function array
        ClipFunction[0] = &A::ClipTop;
        ClipFunction[1] = &A::ClipBottom;
        ClipFunction[2] = &A::ClipLeft;
        ClipFunction[3] = &A::ClipRight;
    }

    //Declare array
    typedef void (A::*ClipFunction_ptr) ();
    ClipFunction_ptr ClipFunction[4];

    //Clipping functions
    void ClipTop();
    void ClipBottom();
    void ClipLeft();
    void ClipRight();

    //Start clipping process
    void StartClip();

};

//Define clipping functions
void A::ClipTop() {}
void A::ClipBottom() {}
void A::ClipLeft() {}
void A::ClipRight() {}

//Define A::StartClip()
void A::StartClip()
{
    //Run through all functions in the array
    for (unsigned int i = 0; i < 4; i++)
    {
        ClipFunction[i](); //ERROR. How do I access ClipFunction[i] ???
    }

}   

3 个答案:

答案 0 :(得分:3)

您需要取消引用此功能: this->(*ClipFunction[i])();

你缺少的是this或者说编译器抱怨它没有第一个参数(调用成员函数的对象的实例)将它传递给函数。

编译成员函数: void A::ClipFunction() { }

转换为: void ClipFunction(A* this) { }

因此错误抱怨该函数不是一个零参数的函数。

答案 1 :(得分:1)

我认为问题在于您需要明确使用“this”,如http://publib.boulder.ibm.com/infocenter/lnxpcomp/v8v101/topic/com.ibm.xlcpp8l.doc/language/ref/cplr034.htm

所以在你的情况下,你应该使用

    (this ->* ClipFunction[i]) ();

而不是

    ClipFunction[i]();

PS

当我回复这篇文章时,我没有看到Vite Falcon的回答。基本上我们说同样的事情,但我不认为他的代码“this-&gt;(* ClipFunction [i])()”会编译因为GCC在我的机器上出错。 “(this-&gt; * ClipFunction [i])()”是正确的形式。

答案 2 :(得分:0)

我认为您不希望在typedef中使用范围解析运算符::。而是试着把

    typedef void (*ClipFunction_ptr) ();