c++ - 在数组函数指针中调用void

标签 c++ arrays

我已经编写了一个数组函数来在外部绘制openGL代码,而不必每次创建新函数时都将其添加到Windows的mainloop中。

它可以正常工作,但是当我将其指向另一个类中的public 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));


有办法打电话吗?

谢谢

最佳答案

您遇到的问题是以下问题:

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)是否起作用以及如何起作用。

关于c++ - 在数组函数指针中调用void,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43825170/

相关文章:

c++ - 不知道使用 google-test 在哪里引发了异常

c++ - 错误 ID 到错误字符串的映射 - C++ 中的实现

c++ - 将 token 转换为char * const *时,带有boost的 token 化字符串失败

javascript - 嵌套的Javascript循环会产生奇怪的结果

javascript - 在React Redux中更新嵌套状态,语法有什么问题?有没有更好的方法来编写该 reducer ?

c++ - Visual Studio运行时检查失败#2-变量'temp'周围的堆栈已损坏

arrays - 使用 Mustache.Js 渲染简单数组

c++ - soap_new() 和soap_copy() 有什么区别?

c++ - C++ 中的宏问题

c - 删除文本文件的一行