我正在学习D,主要有C#方面的经验。具体来说,我正在尝试使用Derelict3结合到SDL2。我已经能够让一些基本功能工作得很好,但对于如何为特定调用创建数组参数感到困惑。
库包含一个调用。
SDL_RenderDrawLines(SDL_Renderer*, const(SDL_Point)*, int) //Derelict3 Binding我一直无法正确地提出这个论点
const(SDL_Point)*这个函数的SDL文档声明这个参数是一个SDL_Point数组,但是我不清楚如何创建一个适当的数组来传递给这个函数。
下面是我目前所拥有的一个例子:
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传递正确的参数类型。
Error: function pointer SDL_RenderDrawLines (SDL_Renderer*, const(SDL_Point)*, int)
is not callable using argument types (SDL_Renderer*, const(SDL_Point[2u]), int)我怀疑这是我的一个根本误解,因此,任何帮助都将不胜感激。
发布于 2013-08-13 05:19:23
数组不能隐式地传递到D中的指针,相反,每个数组(包括静态的和动态的)都有一个内在的.ptr属性,它是指向其第一个元素的指针。
将代码更改为:
SDL_RenderDrawLines(renderer,points.ptr,1);发布于 2013-08-13 10:40:34
考虑到调用请求一个指针和长度,我认为定义自己的包装器更安全:
SDL_RenderDrawLines(SDL_Renderer* rend, const SDL_Point[] points){
SDL_RenderDrawLines(rend,points.ptr,points.length);
}(我不知道为什么没有定义它,额外函数调用对性能的影响只是一个-inline就可以被解决了)
https://stackoverflow.com/questions/18201197
复制相似问题