在数组函数指针中调用void

时间:2017-05-06 20:38:06

标签: c++ arrays

我已经编写了一个数组函数来绘制外部的openGL代码而无需在Windows中添加该函数。每次创建新函数时都会使用mainloop。

它可以正常工作,但是当我将它指向另一个类中的公共void函数时,它表示必须调用非静态成员函数'。

代码:

int main(int argc, const char * argv[])
{
    Window* win = new Window(800, 600, "3D Game Engine");
    Game game;
    win->draw[0] = a;
    win->draw[1] = game.render;

    win->MainLoop();
    delete win;
}

绘制功能:

typedef void (*function_ptr)(int);

function_ptr *draw = (function_ptr*)malloc(sizeof(function_ptr));

有办法打电话吗?

由于

1 个答案:

答案 0 :(得分:2)

您遇到的问题如下:

void (*function_ptr)(int);

指向具有int类型参数的函数的指针。

如果你在类这样的方法中有一个方法:

class exampleClass
{
public:
    void example(int a);
};

C ++编译器内部生成一个带有隐式this参数的函数 - 就像这样:

void exampleClass@example(exampleClass *this, int a);

(内部大多数C ++编译器在这些函数的名称中使用@之类的非法字符 - 但这在这里并不重要。)

因此,您通常无法将类方法分配给此类函数指针。您可以将类型(exampleClass *,int)的函数分配给类型为(int)的函数指针。

为避免这种情况,编译器通常不允许您将类方法存储在函数指针中。

“完全”意味着编译器也不允许使用正确内部类型的函数指针:

void (*function_ptr_2)(exampleClass *, int);
exampleClass y;

/* Not supported by the compiler although it is
 * theoretically possible: */
function_ptr_2 x1 = exampleClass::example; 
function_ptr_2 x2 = y.example; 

不幸的是我的C ++知识不够好所以我无法告诉你Angew的解决方案(std::function)是否以及如何运作。