C++ 返回函数指针的函数
目录[*]0 前言
[*]1 Function Pointer in C/C++ type
[*]1.1 ordinary function Pointer
[*]1.2 non-static member function of class
[*]1.3 Lambda To Function Pointer
[*]1.4 总结什么是指针
[*]2 Returning a function pointer from a function in C/C++
[*]3. C - Variable Arguments (Variable length arguments)
[*]4. Variadic Template
[*]5 Variadic Template withmember function pointer
[*]6 最终解析
[*]X.Refference
0 前言
就像C++其他类型一样,函数也拥有指针,不过不得不说C++和C的函数指针非常抽象,语法空前绝后。加之C++有C的一面,有面向对象的一面,还有面向模板的一面,在《Effective C++》里,作者第一条就点明题意,不能把C++当成1种语言来看,而是4种,每种语言都有独特的风情,而混合起来,你甚至得学习一点密码学...
接下来这段代码(来自小彭老师),核心功能是注册GLFW的回调函数,即接受用户的键盘输入,变换相机位姿进行模型显示。
https://img2023.cnblogs.com/blog/2340361/202312/2340361-20231203173205406-1429388224.png
https://img2023.cnblogs.com/blog/2340361/202312/2340361-20231203173017975-1585015004.png
但看起来却让人望而却步。下面将对此代码进行解读。
template <class, class ...Ts>
static void (*_impl_glfw_input_callback(void (InputCtl::*pFn)(Ts...)))(GLFWwindow *, Ts...) {
static void (InputCtl::*gpFn)(Ts...);
gpFn = pFn;
return [] (GLFWwindow *window, Ts ...args) -> void {
auto game = (Game *)glfwGetWindowUserPointer(window);
if (game) [] {
(game->m_inputCtl.*gpFn)(args...);
}
};
}
template <class FpFn>
static auto glfw_input_callback(FpFn fpFn) {
return _impl_glfw_input_callback<FpFn>(fpFn());
}
// usage
glfwSetCursorPosCallback(window, glfw_input_callback([] { return &InputCtl::cursor_pos_callback; }));1 Function Pointer in C/C++ type
1.1 ordinary function Pointer
以下这段代码来自Author Vysandeep3
// C++ program for the above approach#include using namespace std;void demo(int& a){ a += 10;} // Driver Codeint main(){ int num = 20; // Now ptr contains address of demo // function or void void (*ptr)(int*) = &demo; // or (*ptr)(num); ptr(num); cout
页:
[1]