Boş olan işlevin tek satırdan oluşabilir. Eğer S.init değerinin özel bir anlamı olabiliyorsa asıl işlevin içinde onu denetleyebilirsin:
struct S{}
// Bu işlev tek satır
void foo()
{
foo(S.init);
}
void foo(S)
{
// Asıl işlemler burada...
}
void main()
{
foo();
foo(S());
}
Tam nasıl kullanmak istediğini bilmiyorum ama şablondan yararlanırsan bazı satırları bütünüyle koddan çıkartabilirsin:
import std.stdio;
struct S{}
enum ParametreGeçerli_mi { hayır, evet }
// Bu işlev tek satır (Not: Boş olsa bile şablon parametre listesi şart.)
void foo()()
{
foo!(ParametreGeçerli_mi.hayır)(S.init);
}
void foo(ParametreGeçerli_mi parametreGeçerli_mi = ParametreGeçerli_mi.evet)(S)
{
writefln("\n%s durumu için oluşturulmuş olan foo çağrıldı",
parametreGeçerli_mi);
static if (parametreGeçerli_mi == ParametreGeçerli_mi.evet) {
writeln("Elimde geçerli bir S var");
// Burada pahalı işlemler bulunabilir...
} else {
// ...
}
// Ortak işlemler burada...
}
void main()
{
foo();
foo(S());
}
Çıktısı:
'hayır durumu için oluşturulmuş olan foo çağrıldı
evet durumu için oluşturulmuş olan foo çağrıldı
Elimde geçerli bir S var
'
Ali
--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]