関数は型を知っている必要があります。そうでなければコードを生成するのはかなり難しく、リンカーは確かにそれらに対処できませんでした。つまり、C++のように、Dにはテンプレートがあるため、関数テンプレートを宣言して、関数自体を生成し、それを使用するコードをコンパイルするときにコンパイルすることができます。したがって、同じ型の2つの引数を取りますが、さまざまな型で動作する関数を必要とする場合は、関数テンプレートを使用することになります。例えば
void foo(T)(T a, T b)
{
...
}
または複数のタイプが必要とされた場合、あなたはどちらの場合も
void foo(T, U)(T a, U b)
{
...
}
ような何かを行うことができ、コードはその後、foo
を呼び出すときに、パラメータの型が型から、コンパイラによって推測されます実際の議論の異なる引数型を持つ同じ関数テンプレートを呼び出すと、コンパイラによって追加の関数が生成されます。公式ドキュメントの関連部分はここにある:
http://dlang.org/spec/template.html#function-templates
しかし、オンラインブックからこの章では、おそらくより多くの情報を次のようになります。
http://ddili.org/ders/d.en/templates.html
私はあなたが読んで検討することをお勧めしたいですあなたがDの基礎をたくさん説明してくれるものを望むならば、全体の本(または少なくともそれを見て)。
よく見ると、テンプレート(https://dlang.org/spec/template.html)デザインされているo関数を汎用的にする方法を提供することで、これらの問題の解決に役立ちます。他の方法を示唆するような気があれば、教えてください。 –