この記事は2019年04月18日に投稿しました。
目次
- 作者: ビャーネ・ストラウストラップ,Bjarne Stroustrup,柴田望洋
- 出版社/メーカー: SBクリエイティブ
- 発売日: 2015/02/28
- メディア: 単行本
- この商品を含むブログ (11件) を見る
1. はじめに
こんにちは、iOSのエディタアプリPWEditorの開発者の二俣です。
今回は業務で使用しているC++でクラスのメンバ関数を関数ポインタで呼び出す方法についてです。
2. C++でクラスのメンバ関数を関数ポインタで呼び出す
C++でクラスのメンバ関数を関数ポインタで呼び出すには以下のように行います。
実装例
Foo.h
class CFoo { public: // 関数ポインタの関数を呼び出す関数 void ExecFunc(); private: // 関数ポインタで呼び出す関数本体 void Func(void); private: // 関数ポインタ typedef void (CFoo::*LPFN_FUNC)(void); LPFN_FUNC m_pFunc; }
Foo.cpp
CFoo::CFoo() { // 関数ポインタに関数のアドレスを設定します。 m_pFunc = &CFoo::Func; } void CFoo::Func(void) { printf("Hello world\n"); } void CFoo::ExecFunc(void) { // 関数ポインタの関数を呼び出します。 // 自分のクラスの関数ポインタは // (this->*関数ポインタ) // のように呼び出します。 (this->*pFunc)(); }
main.cpp
int main() { CFoo* pFoo = new CFoo(); pFunc->ExecFunc(); delete pFoo; }
3. おわりに
同じような処理があり、クラスのメンバ関数を関数ポインタでテーブル化できないかを調べてみました。
メンバ関数を関数ポインタの変数に設定はすぐにできました。
しかしその関数ポインタをどう呼び出すかわからず、いろいろ調べました。
(this->*関数ポインタ)
のような書き方があるとは知りませんでした。
完全無料でJavaを学ぶ0円スクール【0円スクール(完全無料のJavaスクール)】
- 作者: 柴田望洋
- 出版社/メーカー: SBクリエイティブ
- 発売日: 2017/12/16
- メディア: 単行本
- この商品を含むブログを見る
紹介している一部の記事のコードはGitlabで公開しています。
興味のある方は覗いてみてください。
私が勤務しているニューラルでは、主に組み込み系ソフトの開発を行っております。
弊社製品のハイブリッドOS Bi-OSは高い技術力を評価されており、特に制御系や通信系を得意としています。
私自身はiOSモバイルアプリやウィンドウズアプリを得意としております。
ソフトウェア開発に関して相談などございましたら、お気軽にご連絡ください。
また一緒に働きたい技術者の方も随時募集中です。
興味がありましたらご連絡ください。
EMAIL : info-nr@newral.co.jp / m-futamata@newral.co.jp
TEL : 042-523-3663
FAX : 042-540-1688