0

クラス/メソッド情報を Angelscript に渡すために asMETHOD マクロに依存しない、Angelscript が発生するより動的なワークフローを取得しようとしています。

しかし、私はこれまでのところそれを機能させることができません。

ここに私が定義したいくつかの構造体があります(クラスとメソッドのデータをセットアップするために使用します):

struct Class {
std::string name;
std::string factorySignature;
void* pointer;
void* factoryPointer;
void* addRefMethodPointer;
void* releaseRefMethodPointer;
};


struct Method {
std::string name;
std::string signature;
void* pointer;
};

asSMethodPtr後で、以前に作成した Class 構造体オブジェクトを使用して構造体オブジェクトを作成しようとします。これが私がすることです:

auto methodPtr = asSMethodPtr<sizeof(void (classObject.pointer)())>::Convert((void (classObject.pointer)())(classObject.addRefMethodPointer));

残念ながら、これにより次のエラーが発生します。

src/common/as_wrapper/AngelScript.cpp:98:66: error: void value not ignored as it ought to be
src/common/as_wrapper/AngelScript.cpp:98:68: error: template argument 1 is invalid
src/common/as_wrapper/AngelScript.cpp:98:107: error: void value not ignored as it ought to be
src/common/as_wrapper/AngelScript.cpp:98:142: error: unable to deduce ‘auto’ from ‘&lt;expression error>’

誰にもアイデアはありますか?この asSMethodPtr 構造体が私の C++ 能力の限界を押し上げているのではないかと心配しています...

4

1 に答える 1

0

メンバー関数へのポインターの形式は、return_type ( class_name ::*)( parameter_list ) const-volatile_qualifiersです。渡そうとしている引数はsizeof、ローカル変数とメンバー変数のように見えるもので構成されており、形式が正しくありません。次のようになります。

sizeof(void (Class::*)())

渡された引数Convertの形式も正しくありません。&address-of 演算子を使用して、アドレスでメンバー関数を取得する必要があります。別の問題はaddRefMethodPointer、関数ではなくメンバー変数であるため、キャストが失敗することです。

struct Class
{
    void SomeMemberFunction() {}
};

(void (Class::*)())(&Class::SomeMemberfunction)
于 2013-04-27T02:55:18.817 に答える