この質問は、私がしようとしているものに似ていますCalling C++ member function pointer from a struct。 しかし、私の構造体には、別のクラスで定義されているメンバ関数ポインタが含まれています。構造体が定義されて使用されています。次に、クラス、構造体、関数ポインタのレイアウト例を示します。あなたが見ることができるようにC++で構造体配列のメンバであるメンバ関数ポインタを呼び出す構文は何ですか?
// Alpha.h:
class Alpha{
public:
void function1(char name[], int number);
void function2(char name[], int number);
void function3(char name[], int number);
typedef void (Alpha::*My_func_ptr)(char name[], int number);
static My_func_ptr functionTable[];
};
// Alpha.cpp:
#include "Alpha.h"
Alpha::My_func_ptr Alpha::functionTable[] = {
&Alpha::function1,
&Alpha::function2,
&Alpha::function3
};
void Alpha::function1(char name[], int number)
{
//some stuff
}
void Alpha::function2(char name[], int number)
{
//some stuff
}
void Alpha::function3(char name[], int number)
{
//some stuff
}
// Beta.h:
#include "Alpha.h"
typdef struct{
char bName[10];
Alpha::My_func_ptr fptr;
}ptr_structure;
class Beta{
public:
void betafunction();
Alpha alphaobject;
ptr_structure str_array[3];
};
// Beta.cpp:
#include "Beta.h"
void betafunction()
{
str_array[0].fptr = alphaobject.functionTable[0];
str_array[1].fptr = alphaobject.functionTable[1];
str_array[2].fptr = alphaobject.functionTable[2];
(str_array[0].fptr)("name", 1); //gives error expression must have
//(pointer-to-) function type
(this->*str_array[0].fptr)("name", 1);
//error pointer-to-member selection class types are incompatible "Beta" and "Alpha"
//sample function pointer call using function table from other class,
//this syntax compiles and runs without error.
(alphaobject.*Alpha::functionTable[0]("name", 1);
}
私がarrayから関数ポインタを呼び出すことができますが、構造体の配列内から関数ポインタを呼び出す方法を見つけ出すように見えることはできません。
'function pointer'と' member function pointer'を区別してみてください。それらは非常に異なっています。 –
また、あなたのコードは(typo 'typdef'のために)コンパイルされません。実際にコードをコピーしてください。 –
ありがとうJesse、私はタイトルを編集するか、質問テキストに追加するだけですか? – ryan