私は、このサードパーティの型定義を持っている:サードパーティコードのメンバ関数へのポインタを正しく渡すにはどうすればよいですか?
サードパーティのライブラリ内の関数で使用されているtypedef void (*NexTouchEventCb)(void *ptr);
:私は、単一の.cppファイルを持っている場合は
void NexTouch::attachPop(NexTouchEventCb pop, void *ptr)
その後、私は正常に呼び出すことができます任意のコンパイラエラーなしattachPop
:
NexButton b0 = NexButton(0, 1, "b0");
void b0PopCallback(void *ptr)
{
// do something here
}
b0.attachPop(b0PopCallback, &b0);
しかし、私はOOPを行うので、私は自分のヘッダファイルとクラスファイルを持っている:
MyNextion.h
class MyNextion {
public:
void init();
void b0PopCallback(void *ptr);
private:
NexButton *b0;
}
MyNextion.cpp
#include "MyNextion.h"
void MyNextion::init() {
b0 = new NexButton(0, 1, "b0");
b0->attachPop(/* what should I put here? */);
}
void MyNextion::b0PopCallback(void *ptr) {
// do something here
}
私もthis、thisとthis 1のようないくつかの同様の質問を通り抜けました。しかし、私はそれを取得しません。
このコードは、AVRマイクロコントローラであるArduino用にコンパイルされています。特別なC++構文は利用できないかもしれません。
私はb0->attachPop
とどのように連絡すればいいですか、どうして私はそのように呼びますか?私はここで見つけることができるサードパーティのライブラリを、変更することはできませんよ
ご注意:https://github.com/itead/ITEADLIB_Arduino_Nextion
:幸いなことに、あなたのAPIを使用すると、あなたが呼び出したいオブジェクトを置くことができ、追加の
void*
ポインタを渡します。また、私はAVRマイクロコントローラであるArduino用にコンパイルしているというメモを追加しました。 – papaiatis可能性のある複製には、静的メンバー機能の実行方法は記載されていません。 – papaiatis
他にも多数の重複がありますが、質問には1つだけフラグを付けることができます。 – MrEricSir