IはD2型テンプレート機能を有する:D2:テンプレート化された関数をDLLで明示的にインスタンス化する方法は?
void AddToAry(InTy, AcTy)(in InTy[] InAry, ref AcTy[] AcAry) {
for(uint i=0; i<InAry.length; i++) AcAry[i] += InAry[i];
}
私は明示的には、このコードを機能するように、異なる引数型の組み合わせについて、DLLによってエクスポート でインスタンス化することを望みます。
3つの準拠した機能の装飾でこれを行うには私の試みは...
export {
void AddToAry(float, float );
void AddToAry(float, double);
void AddToAry(double, double);
}
しかし、収量をコンパイルしようとしました。..
AccumAry_DLL.d(37): Error: function AccumAry_DLL.AddToAry conflicts with template AccumAry_DLL.AddToAry(InTy,AcTy) at AccumAry_DLL.d (23)
がどのようにインスタンス化してから輸出するためにD2のDMDコンパイラを教えてくれありませんDLLから適切に型付けされたコード? .. 代わりにD2 mixinテンプレートを代わりに使用する必要がありますか?
私の回避策は、明示的に型指定されたプロキシ関数を使用することです。私はない紛争にテンプレートの一般的な機能を改名さそう を行い、その後、次のように明示的にインスタンス化プロキシをエクスポートするには:
この作品export { // Hopefuly these proxy functions will be "inlined", and ther is no real forwarding overhead.
void AddToAry(in float[] InAry, ref float[] AcAry) { _AddToAry(InAry, AcAry); }
void AddToAry(in float[] InAry, ref double[] AcAry) { _AddToAry(InAry, AcAry); }
void AddToAry(in double[] InAry, ref double[] AcAry) { _AddToAry(InAry, AcAry); }
} // end export
、Dを確実にする方法がある場合は、私は聞いていますのよ@コンパイラは、プロキシの追加レベルの転送オーバーヘッドを構築しません。私は
void AddToAry!(float, float )(in float[], ref float[]);
とし