首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带参数的D语言函数调用

带参数的D语言函数调用
EN

Stack Overflow用户
提问于 2013-08-13 05:16:43
回答 2查看 592关注 0票数 3

我正在学习D,主要有C#方面的经验。具体来说,我正在尝试使用Derelict3结合到SDL2。我已经能够让一些基本功能工作得很好,但对于如何为特定调用创建数组参数感到困惑。

库包含一个调用。

代码语言:javascript
复制
SDL_RenderDrawLines(SDL_Renderer*, const(SDL_Point)*, int)  //Derelict3 Binding

我一直无法正确地提出这个论点

代码语言:javascript
复制
const(SDL_Point)*

这个函数的SDL文档声明这个参数是一个SDL_Point数组,但是我不清楚如何创建一个适当的数组来传递给这个函数。

下面是我目前所拥有的一个例子:

代码语言:javascript
复制
void DrawShape(SDL_Renderer* renderer)
{
    SDL_Point a = { x:10, y:10};
    SDL_Point b = { x:500, y:500};

    const(SDL_Point[2]) points = [a,b];

    Uint8 q = 255;
    SDL_SetRenderDrawColor(renderer,q,q,q,q);
    SDL_RenderDrawLines(renderer,points,1);
}

编译器抱怨我没有在points中为points传递正确的参数类型。

代码语言:javascript
复制
Error: function pointer SDL_RenderDrawLines (SDL_Renderer*, const(SDL_Point)*, int)
is not callable using argument types (SDL_Renderer*, const(SDL_Point[2u]), int)

我怀疑这是我的一个根本误解,因此,任何帮助都将不胜感激。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-08-13 05:19:23

数组不能隐式地传递到D中的指针,相反,每个数组(包括静态的和动态的)都有一个内在的.ptr属性,它是指向其第一个元素的指针。

将代码更改为:

代码语言:javascript
复制
SDL_RenderDrawLines(renderer,points.ptr,1);
票数 5
EN

Stack Overflow用户

发布于 2013-08-13 10:40:34

考虑到调用请求一个指针和长度,我认为定义自己的包装器更安全:

代码语言:javascript
复制
SDL_RenderDrawLines(SDL_Renderer* rend, const SDL_Point[] points){
    SDL_RenderDrawLines(rend,points.ptr,points.length);
}

(我不知道为什么没有定义它,额外函数调用对性能的影响只是一个-inline就可以被解决了)

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

https://stackoverflow.com/questions/18201197

复制
相关文章

相似问题

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