首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >来自C++的Angelscript传输数组

来自C++的Angelscript传输数组
EN

Stack Overflow用户
提问于 2020-07-11 05:08:53
回答 1查看 259关注 0票数 0

我需要将一个瓷砖数组从C++传输到Angelscript,我已经尝试添加一个函数,它返回一个std::向量,但是它返回这个错误。

代码语言:javascript
复制
Failed in call to function 'RegisterGlobalFunction' with 'array<DumbTile> GetTilesAt(int x, int y)' (Code: asINVALID_DECLARATION, -10) 

我的代码:

代码语言:javascript
复制
std::vector<DumbTile> GetTilesAt(int x, int y) {
    std::vector<DumbTile> output;
    for (DumbTile t : tiles) {
        if (t.x == x && t.y == y) {
            output.push_back(t);
        }
    }
    return output;
}
engine->RegisterGlobalFunction("array<DumbTile> GetTilesAt(int x, int y)", asFUNCTIONPR(GetTilesAt, (int, int), std::vector<DumbTile>), asCALL_CDECL); 
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-12 12:00:21

DumbTileGetTilesAt()注册之前注册了吗?

array<T>GetTilesAt()注册之前注册了吗?

这两个都需要注册,然后才能注册您的功能。

您是在使用库存数组实现(sdk/add_on/scriptarray/)还是您自己的std::vector<>-based实现?当使用股票加注时,应用程序必须首先将std::vector转换为CScriptArray,因为angelscript由于数组的工作方式不能真正做到这一点。

显然,从使用std::vector切换到任何地方的CScriptArray都有其他的选择,您希望脚本可以访问数据,但这可能会很烦人。

示例std::vector<Object*> <-> CScriptArray*转换

代码语言:javascript
复制
template<typename Type>
void AppendVectorToArrayRef( vector<Type>& vec, CScriptArray* arr )
{
    if( !vec.empty() && arr )
    {
        uint i = (uint)arr->GetSize();
        arr->Resize( (asUINT)(i + (uint)vec.size() ) );
        for( uint k = 0, l = (uint)vec.size(); k < l; k++, i++ )
        {
            Type* p = (Type*)arr->At( i );
            *p = vec[k];
            (*p)->AddRef();
        }
    }
}
代码语言:javascript
复制
template<typename Type>
void AssignScriptArrayInVector( vector<Type>& vec, CScriptArray* arr )
{
    if( arr )
    {
        uint count = (uint)arr->GetSize();
        if( count )
        {
            vec.resize( count );
            for( uint i = 0; i < count; i++ )
            {
                Type* p = (Type*)arr->At( i );
                vec[i] = *p;
            }
        }
    }
}

代码有点老了,但我认为它应该仍然有效,即使它要求进行一些刷新。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62845421

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档