Sirius X

需要無視の自己満足ブログです。

C++ クラスのメソッドで関数ポインタとコールバックをする

Category:C/C++, プログラミング入門・学習 Comment:0

eyecatch

ちょっと準備運動しました😀

#include <iostream>
#include <string>
#include <map>


class SpriteBank
{
public:
    SpriteBank() = default;
    ~SpriteBank() = default;
    bool myGetMessage(std::string* byref_str, std::string byval);
};

using PF = bool (SpriteBank::*)(std::string*, std::string);

bool SpriteBank::myGetMessage(std::string* byref_str, std::string byval) {
    *byref_str = byval;
    return true;
}


class PlayerController
{

public:
    PlayerController();
    ~PlayerController();
    std::string Func(PF pt_func);

private:

};


PlayerController::PlayerController()
{

}

PlayerController::~PlayerController()
{

}

std::string PlayerController::Func(PF pt_func)
{
    SpriteBank obj;
    std::string msg;
    bool b = (obj.*pt_func)(&msg, "メッセージを受信しました。");
    return msg;
}


int main()
{
    SpriteBank* sprite_bank_ = new SpriteBank;
    PlayerController controller;

    PF tetraPF = &SpriteBank::myGetMessage;

    std::string bind_text = controller.Func(tetraPF);

    std::cout << bind_text << std::endl;

    delete sprite_bank_;

    return 0;
}

出力結果

tetraPFはクラスメソッド(関数)ポインタです。

これにクラスのメソッドを別のクラスに渡して、メソッドをリモート実行します。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です