[英]Receive arrays of arrays of … in D function?
不知道是否可能,我想收到data[n]
或data[n][n][n]
。 在C可以(如果错误,纠正我):
void save_data(void* arr, int n, int dimensions)
{
// do ugly things
}
但必须在D中存在一种更优雅的方式。
除了使用C风格指针算术之外,另一种选择是模板safe_data
,即执行以下操作:
import std.stdio;
import std.traits;
void safe_data(T)(in T arr) {
static if(isArray!T) {
writeln("Length ", arr.length); // do some ugly stuff for whole array
foreach(e; arr) safe_data(e); // recursively go deeper
} else {
writeln("Element ", arr); // do more ugly stuff on individual elements
}
}
void main() {
writeln("A");
int[3] A = [1,2,3];
safe_data(A);
writeln("B");
int[3][2] B = [[1,2,3],[4,5,6]];
safe_data(B);
}
根据您要对数据执行的操作,您可能希望在in
使用ref
。 顺便说一下,如果你愿意,你可以移动static if
函数, static if
在函数之外,有时会产生更干净的代码:
// handle arrays
void safe_data(T)(in T arr) if(isArray!T) {
writeln("Length ", arr.length); // do some ugly stuff for whole array
foreach(e; arr) safe_data(e); // recursively go deeper
}
// handle array elements
void safe_data(T)(in T e) if(!isArray!T) {
writeln("Element ", e); // do more ugly stuff on individual elements
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.