C++之尝试把类成员作为回调函数

问题提出:

在使用openGL的时候我想通过在类里面使用并且定义回调函数,经过对这个问题了解并且寻找解决办法,我才发现其实这绝非易事。

尝试解决:

一开始发现普通的成员函数由于隐藏着一个参数this,因此他无法作为回调函数。于是我将函数改成静态成员函数。但是这时候却发现静态成员函数只能访问静态成员变量,这就失去了我想把回调函数写在类里面的初衷,我希望这个函数可以访问成员变量而不仅仅是静态成员变量。

第二种方法是利用友元函数,但是友元函数同样需要传入对象才可以操作对象的成员,所以无意义。

这时候我发现了一种方法,bind函数,可以将函数和参数绑定在一起,这样就可以实现对成员函数使用bind把他和第一个参数this绑定在一起,进而把他作为回调函数。

auto b_reshape=std::bind(&Game::reshape,this,_1,_2);
auto b_display=std::bind(&Game::display,this);
auto b_gameOver=std::bind(&Game::gameOver,this);
auto b_keyOperation=std::bind(&Game::keyOperation,this);
auto b_welcomeScreen=std::bind(&Game::welcomeScreen,this);

编译。发现

错误,因为bind生成是std::function,而回调函数要求的是c风格function pointer,除非再进一步转化,否则二者是不同的。

解决:

最终我做了妥协,选择使用类外函数对成员函数进行再一步的包装,并且在类外使用回调函数。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇