Merhaba,
Yapı içinde kullanılmak üzere bir takım katma şablonlar hazırlıyorum. Yanlışlıkla 2 şekilde de (özellikle v2 beni biraz şaşırtarak) kullanılabildiğini gördüm:
void main()
{
template MyStruct(Type, Type var = 0)
{
MyStruct inner = var;
struct MyStruct
{
Type value;
this(Type x)
{
value = x + 1;
}
}
}
}
mixin MyStruct!int foo; // v1
assert(foo.inner.value == 1);
MyStruct!int bar = 1; // v2
assert(bar.value == 2);
Katma gibi tasarladım ama değil gibi? Hakikaten de kısa kullanımı ile (Type'ı MyStruct yanına koyup geri kalan her şeyi kaldırarak) alıştığımız v2 sürümü ortaya çıkıyor ama hiçbir değişiklik yapmadan v1 sürümü gibi mixin ile kullandığınızda kodu bir yapı içine kurulmuş bir şekilde (hatta var: varsayılan değeriyle) ekleyebiliyorsunuz.
Belki tek eksiği içerdeki inner'ın kurucusuna derleme anında v2'deki gibi erişememeniz. Onu da pekala "var" ile halledebilirsiniz.
Muazzam esnek...