C++ 返回函数指针的函数

打印 上一主题 下一主题

主题 880|帖子 880|积分 2640

目录

0 前言

就像C++其他类型一样,函数也拥有指针,不过不得不说C++和C的函数指针非常抽象,语法空前绝后。加之C++有C的一面,有面向对象的一面,还有面向模板的一面,在《Effective C++》里,作者第一条就点明题意,不能把C++当成1种语言来看,而是4种,每种语言都有独特的风情,而混合起来,你甚至得学习一点密码学...
接下来这段代码(来自小彭老师),核心功能是注册GLFW的回调函数,即接受用户的键盘输入,变换相机位姿进行模型显示。


但看起来却让人望而却步。下面将对此代码进行解读。
  1. template <class, class ...Ts>
  2. static void (*_impl_glfw_input_callback(void (InputCtl::*pFn)(Ts...)))(GLFWwindow *, Ts...) {
  3.     static void (InputCtl::*gpFn)(Ts...);
  4.     gpFn = pFn;
  5.     return [] (GLFWwindow *window, Ts ...args) -> void {
  6.         auto game = (Game *)glfwGetWindowUserPointer(window);
  7.         if (game) [[likely]] {
  8.             (game->m_inputCtl.*gpFn)(args...);
  9.         }
  10.     };
  11. }
  12. template <class FpFn>
  13. static auto glfw_input_callback(FpFn fpFn) {
  14.     return _impl_glfw_input_callback<FpFn>(fpFn());
  15. }
  16. // usage
  17. glfwSetCursorPosCallback(window, glfw_input_callback([] { return &InputCtl::cursor_pos_callback; }));
复制代码
1 Function Pointer in C/C++ type

1.1 ordinary function Pointer

以下这段代码来自  Author Vysandeep3
[code]// 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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

小秦哥

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表