ラムダ式がコールバックに有用とのことでコードをスッキリさせようと思い
glfwSetKeyCallback()にラムダ式を渡したのですがコンパイラに型が違う(?)と怒られてしまいました。
(GLFWkeyfun)でキャストしてみたり戻り値に -> GLFWkeyfun や -> voidと書いても状況は変わらず八方ふさがりで困っています。
コードは以下の通りです。
int myWindowInit(GLFWwindow** mainWindow, /*略*/base_c * base)
{
/*中略*/
glfwSetKeyCallback(*mainWindow, [=] (GLFWwindow* cbWindow, int key, int scancode, int action, int mod) {if(action == GLFW_PRESS && base != NULL)base->func(key);});
return 0;
}
$ g++ -std=c++11 `pkg-config --cflags glfw3` -o myprog3 copymain.c title_c.cpp myGLFunctions.c `pkg-config --libs glfw3` -lGLEW
copymain.c: In function ‘int myWindowInit(GLFWwindow**, GLFWmonitor**, config_t*, base_c*)’:
copymain.c:306:166: error: cannot convert ‘myWindowInit(GLFWwindow**, GLFWmonitor**, config_t*, base_c*)::__lambda0’ to ‘GLFWkeyfun {aka void (*)(GLFWwindow*, int, int, int, int)}’ for argument ‘2’ to ‘void (* glfwSetKeyCallback(GLFWwindow*, GLFWkeyfun))(GLFWwindow*, int, int, int, int)’
glfwSetKeyCallback(*mainWindow, [=] (GLFWwindow* cbWindow, int key, int scancode, int action, int mod) {if(action == GLFW_PRESS && base != NULL)base->func(key);});
^
ライブラリとコンパイラのバージョンは以下の通りです。
glfw 3.1.1
g++ (Ubuntu 4.8.2-19ubuntu1) 4.8.2
初投稿で至らぬ点が多々あるとは思いますがどうかお力添えの程をおねがいします。