我正在尝试使用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结构对象。这就是我要做的:
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>’有谁有什么想法吗?我担心这个asSMethodPtr结构正在突破我的C++能力的极限...
发布于 2013-04-27 10:55:19
指向成员函数的指针的格式为return_type (class_name::*)(parameter_list) const-volatile_qualifiers。您尝试传递给sizeof的参数由一个局部变量和一个成员变量组成,并且格式不正确。它应该如下所示
sizeof(void (Class::*)())您传递给Convert的参数格式也不正确。您需要使用& address-of运算符通过address获取成员函数。另一个问题是,addRefMethodPointer是一个成员变量,而不是一个函数,因此转换将失败。
struct Class
{
void SomeMemberFunction() {}
};
(void (Class::*)())(&Class::SomeMemberfunction)https://stackoverflow.com/questions/16244004
复制相似问题