SORU
2 ŞUBAT 2010, Salı


Neden kullanıyorum t'şablon parametre olarak değer yüzebilir?

Şablon parametre olarak float kullanmaya çalıştığımda, derleyici int iyi çalışır bu kod için ağlar.

Şablon parametre olarak float kullanamazsınız diye mi?

#include<iostream>
using namespace std;

template <class T, T defaultValue>
class GenericClass
{
private:
    T value;
public:
    GenericClass()
    {
        value = defaultValue;
    }

    T returnVal()
    {
        return value;
    }
}; 


int main()
{
    GenericClass <int, 10> gcInteger;
    GenericClass < float, 4.6f> gcFlaot;

    cout << "\n sum of integer is "<<gcInteger.returnVal();
    cout << "\n sum of float is "<<gcFlaot.returnVal();

    return 0;       
}

Hata:

main.cpp: In function `int main()':
main.cpp:25: error: `float' is not a valid type for a template constant parameter
main.cpp:25: error: invalid type in declaration before ';' token

main.cpp:28: error: request for member `returnVal' in `gcFlaot',
                    which is of non-class type `int'

Okuyorum"Oyun Programcıları için veri Yapıları"Ron Penton, yazar float ama çalıştığımda derleme görünmüyor bir geçer.

CEVAP
17 Temmuz 2012, Salı


BASİT BİR CEVAP

Standart olarak puan kayan izin vermeztip şablon değişkenleriC 11 standart aşağıdaki bölümde okumak ile ilgili olabilir; .,

14.3.2/1 olmayan bir tür bağımsız değişkenleri Şablon [temp.arg.yazı olmayan]

Olmayan tipte bir şablon için şablon bağımsız değişken bir şablon parametresi biri olmalıdır:

  • bu tip tip şablon parametre ayrılmaz bir veya numaralandırma türü, dönüştürülmüş bir sabit ifade (5.19) şablon parametre;

  • olmayan bir tür adı da şablon parametre; ya

  • statik depolama süresi ile bir nesnenin adresi atayan bir sabit ifade (5.19) ve dış ya da iç bağlantı ya dış ya da iç bağlantı ile bir fonksiyonu, işlevi de dahil olmak üzere ve işlev şablonu-kimlikleri fakat statik olmayan sınıf hariç şablonları üyeler, ifade (parantez görmezden) ve kimliği olarak ifade hariç ve eğer adını bir işlevi veya dizi için başvurursa atlanmış olabilir ve eğer şablon parametre ilgili ise ihmal edilir bir başvuru; ya

  • null işaretçi değeri (4.10) olarak hesaplanan sabit bir ifade; ya

  • üye null işaretçi değeri (4.11) olarak hesaplanan sabit bir ifade; ya

  • üyesi için bir işaretçi 5.3.1 açıklanan dile getirdi.


Ama.. ama.. NEDEN!?

Muhtemelen kayan nokta hesaplamaları kesin bir şekilde temsil edilemiyor olması nedeniyle. Eğer izin verilmişse, bu gibi bir şey yaparken hatalı/garip davranışlara neden olur/olabilir;

func<1/3.f> (); 
func<2/6.f> ();

Aynı fonksiyon iki kez aramak istedik ama bu iki hesaplamalar kayan nokta gösterimi garantisi olmadığından durumda olmayabilirtam olarakaynı.


Nasıl şablon bağımsız değişken olarak kayan nokta değerleri temsil eder ki?

C 11 ile oldukça gelişmiş yazabilirsinizsabit ifadeler(constexpr) kayan bir değeri derleme zamanı ve ayrı tamsayı bağımsız değişken olarak bu iki pas sonra pay/payda hesaplamak.

Kayan nokta değerleri birbirine yakın aynı verimi o eşiği bir tür tanımlamak için hatırlıyorumpay/denomitoraksi takdirde bu yana anlamsız biraz sonra aynı sonucu kayan nokta izin vermek için bir neden olarak değerleri olarak daha önce de belirttiğim verecektirolmayan tür bağımsız değişkenleri şablon.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • HBO

    HBO

    17 Mayıs 2006
  • MrMimoB

    MrMimoB

    11 NİSAN 2011
  • schmittastic

    schmittastic

    9 EYLÜL 2009