Итак, у меня есть простой класс, ведьма инициализирует GLFW и создает окно:функции обратного вызова REFERENCING GLFW от класса
namespace ALT {
struct InputInformation {
GLfloat lastX;
GLfloat lastY;
bool keyboard[1024];
};
class Window {
public:
Window(GLuint width, GLuint height, std::string title);
~Window();
int run();
private:
void setUp();
void mainLoop();
GLuint _width;
GLuint _height;
GLFWwindow* _window;
std::vector<Shader> _shaders;
std::unique_ptr<ALT::Heightmap> _heightmap;
std::unique_ptr<Model> _nanosuit;
std::unique_ptr<ALT::Camera> _camera;
void executeKeyboardInput();
void key_callback(GLFWwindow* window, int key, int scancode, int action, int mode);
void mouse_callback(GLFWwindow* window, double xpos, double ypos);
ALT::InputInformation _input;
};
}
Теперь я хочу, чтобы установить Мыши и клавиатуры Обратный вызов из конструктора:
ALT::Window::Window(GLuint width, GLuint height, std::string title)
: _width(width), _height(height)
{
glfwInit();
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
glfwWindowHint(GLFW_SAMPLES, 4);
glfwWindowHint(GLFW_RESIZABLE, GL_FALSE);
_window = glfwCreateWindow(width, height, title.c_str(), nullptr, nullptr);
glfwMakeContextCurrent(_window);
glfwSetInputMode(_window, GLFW_CURSOR, GLFW_CURSOR_DISABLED);
glfwSetKeyCallback(_window, ALT::Window::key_callback);
glfwSetCursorPosCallback(_window, ALT::Window::mouse_callback);
glewExperimental = GL_TRUE;
glewInit();
}
Это ошибка, я получаю:
cannot convert ‘ALT::Window::mouse_callback’ from type ‘void (ALT::Window::)(GLFWwindow*, double, double)’ to type ‘GLFWcursorposfun {aka void (*)(GLFWwindow*, double, double)}’
glfwSetCursorPosCallback(_window, ALT::Window::mouse_callback);
Эта ошибка одинакова для обеих функций обратного вызова. Возможно ли выполнить эту функцию обратного вызова так, как я это делаю?
Я использовал это на main(), поэтому мне было намного проще.
Я мог бы также объявить функции обратного вызова вне класса, но тогда я не смог получить доступ к членам класса Window.
Вам даже не нужен первый 'reinterpret_cast'. – elmindreda
@elmindreda это во всяком случае во время выполнения, и я хотел бы убедиться, что семантика, которую я хочу (отбрасывание дает мне правильный указатель), есть. –