创建一个angelscript asSMethodPtr(没有asMETHOD宏)

时间:2013-04-26 19:39:08

标签: c++ templates angelscript

我正在尝试使用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 ++能力的极限......

1 个答案:

答案 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)