글쎄, 첫 번째 템플릿 거의은 두 번째 템플릿이 필요없이 작동합니다.
4LU
4LU
4LU
그러나 예,이 코드
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)));
}
인쇄의 경우, 작동하지 않습니다 내장 타입 - 예를 들어, size!int
은 컴파일되지 않습니다. 문제는 alias
매개 변수가 기호를 허용한다고 가정하는 반면, int
과 같은 기본 제공 유형은 기호가 아닌 키워드입니다. 어떤 논의가 있은 후 월터 브라이트는 alias
매개 변수가 alias
문과 비슷한 방식으로 작동하도록 변경해야하며 내재 된 유형을 허용하지만 변경이 아직 이루어지지 않았다는 것을 알고 있습니다. 해결 방법은 variadic 템플릿을 사용하지만 길이를 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가 필요하지 않을 것이기 때문에 이것이 고정되기를 바랍니다. –