Я работаю над простым движком, написанным на C ++ и обернутым ctypes. Я работаю над классом окна и хочу дать пользователю движка возможность устанавливать функции рисования и обновления. У меня есть следующий код:
window.h
#pragma once
#include <GL/glew.h>
#include <GLFW/glfw3.h>
class window
{
public:
GLFWwindow* wnd;
window(int width, int height, const char* title);
void close();
void update();
void (window::*draw)();
void setDrawFunction(void (window::*)());
void setUpdateFunction(int*);
};
window. cpp
#include <GL/glew.h>
#include <GLFW/glfw3.h>
#include "window.h"
void default_draw() {
glClear(GL_COLOR_BUFFER_BIT);
}
void default_update() {
}
window::window(int width, int height, const char* title)
{
glfwWindowHint(GLFW_SAMPLES, 4);
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
glfwWindowHint(GLFW_OPENGL_COMPAT_PROFILE, GL_TRUE);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
wnd = glfwCreateWindow(width, height, title, NULL, NULL);
if (wnd == NULL) { glfwTerminate(); return; }
glfwMakeContextCurrent(wnd);
if (glewInit() != GLEW_OK) {
glfwTerminate();
return;
}
setDrawFunction((void)(window::*)()default_draw);
}
void window::close() {
glfwDestroyWindow(this->wnd);
}
void window::update() {
default_update();
}
void window::setDrawFunction(void (window::*fnptr)()) {
draw = fnptr;
}
Это не работает. Я упускаю что-то очевидное или sh таким образом просто невозможно выполнить. Если да, могу ли я добиться этого? Все, что мне нужно, это иметь возможность перегрузить функцию, поэтому я могу сделать это в python, используя ctypes.
Ошибки, которые я получаю: выражение 109 перед вызовом должно иметь ожидаемое выражение типа функции (указателя) 29 18 ожидается ")"