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 回答