あなたが持っているものから、最初のテンプレートは、の2番目を必要とせずに動作します。例えば、このコード
struct S
{
int i;
}
template size(alias T)
{
enum size = T.sizeof;
}
void main()
{
pragma(msg, size!10);
pragma(msg, size!S);
pragma(msg, size!(S(10)));
}
プリント
4LU
4LU
4LU
しかし、それは内蔵型では動作しません - 例えばsize!int
はコンパイルされません。問題はalias
のパラメータがシンボルを受け入れるはずであるのに対し、int
などの組み込みタイプはシンボルではなくキーワードであるということです。ウォルターブライトは、alias
パラメーターがalias
ステートメントのように機能するように変更しなければならないと確信していましたが、組み込みタイプは受け入れますが、その変更はまだ行われていません。その間の回避策は、可変長テンプレートを使用し、長さを1に制限することです。
struct S
{
int i;
}
template size(T...)
if(T.length == 1)
{
enum size = T[0].sizeof;
}
void main()
{
pragma(msg, size!10);
pragma(msg, size!S);
pragma(msg, size!(S(10)));
pragma(msg, size!int);
}
プリント
4LU
4LU
4LU
4LU
再びあなたの助けに感謝 - あなたは正確なものすべてがほぐれてきたユースケースを見つけました。これらのkludgesが必要でないようにこれが固定されることを望みましょう。 –