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

eyecatch C/C++
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はクラスメソッド(関数)ポインタです。

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

コメント

タイトルとURLをコピーしました