Forum: Ders Arası RSS
Fonksiyondan şablon tipi dönmek
zafer #1
Üye Tem 2009 tarihinden beri · 700 mesaj · Konum: Ankara
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Konu adı: Fonksiyondan şablon tipi dönmek
Merhaba,

MongoCursor!(T,R,U) find(R, T, U)(...);

Yukarıdaki kodda find metodunun dönüş tipi bir şablon tipi, bu metodu çağırdığım yerde bu şablon tipinde bir değişkeni nasıl tanımlaya bilirim?

Ayrıca "auto" kullanabilirim biliyorum ama dile yeni başlayan ve dili tanıma aşamasında olan kişiler için "auto" olanağının kullanılmaması gerektiğini düşünüyorum. Tabi ki buradaki amacım şablon tiplerinden degişken tanımlamayı öğrenmek.
https://github.com/zafer06 - depo
acehreli (Moderatör) #2
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Haklısın ama ne yazık ki en kolayı auto, const, vs. kullanmak çünkü çoğu durumda türü bilmek zorunda bile kalmıyoruz. Önemli olan, nasıl kullanıldığı. Mutlaka yazmak zorunda kalırsak, aşağıdaki 'a' değişkeni veya 'b' değişkeni tanımı gibi yapabiliriz. Ama görüldüğü gibi, hiç hoş değil:
struct MongoCursor(T, R, U)
{}
 
MongoCursor!(T,R,U) find(R, T, U)(R[], T[], U)
{
    return MongoCursor!(T,R,U)();
}
 
void main()
{
    MongoCursor!(double, int, char) a = find([ 42 ], [ 1.5 ], 'a');
 
    alias X = typeof(find([ 42 ], [ 1.5 ], 'a'));
    X b = find([ 42 ], [ 1.5 ], 'a');
}
Hatta, bazı durumlarda işlevler Voldemort denen adı anılamaz türler döndürdüklerinde hiçbir şansımız yok:
auto find(R, T, U)(R[], T[], U)
{
    /* Bu tür dışarıdan anılamaz. */
    static struct MongoCursor(T, R, U)
    {}
 
    return MongoCursor!(T,R,U)();
}
 
void main()
{
    /* a'nın türü söylenemez ama kullanılabilir. */
    auto a = find([ 42 ], [ 1.5 ], 'a');
}
Ali
zafer #3
Üye Tem 2009 tarihinden beri · 700 mesaj · Konum: Ankara
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
"auto" olanagına karşı değilim ancak bilinçli kullanmaktan yanayım, bence herhangi bir meslek sahibi öncelikle işinin nasıl yapıldığını bilmeli, bundan sonra elbette daha pratik yöntemler kullanarak bu süreci iyileştirbilir. Açıklama için teşekkürler.
https://github.com/zafer06 - depo
Doğrulama Kodu: VeriCode Lütfen resimde gördüğünüz doğrulama kodunu girin:
İfadeler: :-) ;-) :-D :-p :blush: :cool: :rolleyes: :huh: :-/ <_< :-( :'( :#: :scared: 8-( :nuts: :-O
Özel Karakterler:
Forum: Ders Arası RSS
Bağlı değilsiniz. · Şifremi unuttum · ÜYELİK
This board is powered by the Unclassified NewsBoard software, 20100516-dev, © 2003-10 by Yves Goergen
Şu an: 2017-11-18, 09:21:05 (UTC -08:00)