【问题标题】:How to assign to the array of pointers functions from another object?如何从另一个对象分配给指针函数数组?
【发布时间】:2018-03-18 23:29:43
【问题描述】:

我定义了

int(*Functions[3])();

int select(){
cout<<"SELECT!";
getchar();
}

现在我想为“功能”分配一个功能,当我这样做时:

Functions[0]=select;
Functions[0];

它有效,但我想从我自己的对象中分配函数“选择”

class worker{
HERE DEFINED FUNCTION
}

worker object1;
Functions[0]=object1.select;

它不起作用。 "使用 '&' 创建指向成员的指针", " '=': 无法从 'int(_thiscall worker::)(void)' 转换为 'int(_cdecl)(void)' "

我不知道使用之间的区别

select();
object1.select();

【问题讨论】:

  • 不能使用指向非成员函数的指针。
  • 为什么不呢?你能解释一下吗?
  • 你能用指向int的指针指向一个字符串吗?

标签: c++ function class pointers


【解决方案1】:

指向成员函数的指针不能用于非成员函数,反之亦然。如果您愿意,请在您的示例中为成员函数创建另一个。

class Foo{
    public:
        void func(){
            cout << "Foo::func()" << endl;
        }
};

void func2(){
    cout << "func2()" << endl;
}


int main(){

    void(*pFunc[3])();
    pFunc[0] = func2;

    void(Foo::*pFunc2[3])();
    pFunc2[0] = &Foo::func;

    Foo theFoo; // You need an object to call it
    (theFoo.*(pFunc2[0]))(); // calling the member function

    return 0;
}

另外作为@Serge 的有用评论:

指向成员函数的指针需要知道封装对象的类型和对象在使用时的实例。因此,它不是一个简单的指针,只能用于静态函数(包括在类中定义的静态函数)。

【讨论】:

  • 指向成员函数的指针需要知道封装对象的类型和对象在使用时的实例。因此它不是一个简单的指针。仅可用于静态函数的简单指针(包括在类中定义的静态函数)。后者可能只是函数在内存中的地址。
  • 可以,但是还有一个问题,这个函数怎么调用?
  • @Serge:感谢您的有用评论。
  • void print( void(Foo::*pFunc[])(), int size ){ Foo f; for(int i(0); i != size; ++i) (f.*pFunc[i])(); }
  • 您还可以将对象f 传递给函数,而不仅仅是在函数内部声明它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-11-25
  • 1970-01-01
  • 2013-01-16
  • 2018-08-24
  • 1970-01-01
  • 2021-10-28
  • 1970-01-01
相关资源
最近更新 更多