我正在尝试使用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;
};
稍后,我尝试使用我之前创建的Class结构对象创建一个asSMethodPtr
struct对象。这就是我的工作:
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 ‘<expression error>’
有人有什么想法吗?我担心这个因为SmatodPtr结构正在推动我的C ++能力的极限......
答案 0 :(得分: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)