簡體   English   中英

在D函數中接收...數組的數組?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM