我正在創建一個輸入範圍來遍歷自定義容器,該容器包含需要保持精確配對的輸入和目標的數據點。我需要不同的範圍來返回訓練數據(double [] []),輸入(double [])和目標(也是double [])。我設法得到以下代碼進行編譯和完美工作,但我不知道爲什麼。結構表達式參數與類型參數
public struct DataRange(string type)
if(type == "TrainingData" ||
type == "InputData" ||
type == "TargetData")
{
private immutable(int) length;
private uint next;
private Data data;
this(Data d){
this.length = d.numPoints;
this.next = 0;
this.data = d;
}
@property bool empty(){return next == length;}
@property auto front(){
static if(type == "TrainingData")
return this.data.getTrainingData(next);
else static if(type == "InputData")
return this.data.getInputData(next);
else return this.data.getTargetData(next);
}
void popFront(){++next;}
}
static assert(isInputRange!(DataRange!"TrainingData"));
static assert(isInputRange!(DataRange!"InputData"));
static assert(isInputRange!(DataRange!"TargetData"));
我一直在讀了「d編程語言」,由Alexandrescu的,我已經找到了形式
struct S(T){...} // or
struct S(T[]){...}
但這些都需要類型參數,而不是表達我好象的參數結構完成。我無法在參數化類型dlang.org上找到任何類似的例子。
這個編譯和工作在DMD 2.066和GDC 4.9.0。
我甚至不知道我爲什麼試過這個,回頭看看它,我不知道它爲什麼起作用。有人知道我錯過了什麼嗎?這在哪裏記錄?
有一本關於D模板的書籍/教程可在線獲取:https://github.com/PhilippeSigaud/D-templates-tutorial。它有時可以比語言文檔更好地解釋事物。 – yaz 2014-10-17 08:34:47