我可以在D中编写一个带静态数组字符的函数吗?

时间:2014-09-24 09:25:39

标签: garbage-collection d static-array

例如,我想编写一个带有此签名的函数:int foo(char[])并使用char[5] x; foo(x)调用它。

目前我收到编译错误,指出char []与char [5]不同。

我想写一下:int foo(uint SIZE)(char[SIZE])但是我必须在调用foo前明确设置长度:foo!5(x)以前的例子。

编辑:你们是对的,我的函数实际上看起来像foo(ref char[]),我已经宣布它为@nogc。我想要做的是用数据填充给定的静态数组。 从更广泛的意义上讲,我试图实现简并format函数,因为标准库肯定使用GC而我无法从其他非GC代码中调用它。有关于此的任何想法吗?

1 个答案:

答案 0 :(得分:2)

char []确实与char [5]相同,但没有什么能阻止您将静态数组作为参数传递给具有char []参数的函数,因为隐式转换。

示例:

module so.d26013262;

import std.stdio;

int getSize(int[] arr) {
    return arr.length;
}

void main(string[] args) {
    int[5] starr;
    int[] dyarr = [1, 3, 2];

    writeln(getSize(starr));
    writeln(getSize(dyarr));
}

输出:

5
3

我的猜测是你在其他地方遇到错误......