Merhaba,
İlk olarak aşağıdaki gibi bir yapımız olsun; tür şablonu ile çevrelenen:
struct Enumlarım(T)/*
alias T = int;
struct Enumlarım//*/
{
enum UzunAdıOlanTürüm : T
{
False, True
}
//...
}
Yani buradaki şablon parametresi olan T'ye dikkat. Aslında Enumlarım yapısını bir instance name ile ilişkilendirmek istemiyorum ama aşağıdaki gibi kurmak zorunda kalıyorum çünkü o zaman Bool alias'ı kurulmuyor!
void main()
{
// Kurulum:
Enumlarım!int enumlarım;
alias Bool = enumlarım.UzunAdıOlanTürüm;
// Kontrol:
auto selamVer(Bool vereyim_mi) {
return vereyim_mi ? "selam" : "küstüm :)";
}
// Sonuç:
import std.stdio;
Bool selam;
selamVer(++selam).writeln; // selam
}
Eğer Bool ='den sonra büyük harfle (lütfen değiştirip deneyin) doğrudan takma ad oluşturursanız çok garip bir hata alıyorum:
>source_file.d(16): Error
identifier UzunAdıOlanTürüm
of Enumlarım.UzunAdıOlanTürüm
is not defined
Neden böyle? Aslında cevabını biliyorum, sanırım! Eğer örnek kodun en üstünü kaparsanız (// - toggle comment ekleyin) T'yi yapıdan ayırmış olacaksınız. Eee tabi enumlarım'ı artık silin gitsin ve şu şekilde çalıştığını göreceksiniz:
alias Bool = Enumlarım.UzunAdıOlanTürüm;
auto selamVer(Bool vereyim_mi) {
return vereyim_mi ? "selam" : "küstüm :)";
}
import std.stdio;
void main()
{
Bool selam;
selam.selamVer.writeln; // küstüm :)
}
struct Enumlarım {
enum UzunAdıOlanTürüm { False, True }
}
Özetle, cevabını bildiğim bir soru çünkü şablon parametresi aldığı için o artık başka bir yapı ama alias içinde bağlayamamak üzücü. Çünkü kullandığım enum'ları bir struct içinde ve varsayılan temel veri türlerini (T) derleme anında değiştirebileceğim bir düzene ihtiyaç duyuyorum.
Diğer soru(n) az sonra...