türlü varsayılan değerini almak için:Böyle bir şey yazabilirsiniz C#
class AnyThing<T>
{
static public T Default = default(T);
}
static void Main()
{
int i = AnyThing<int>.Default;
Console.WriteLine (i==0);
string s = AnyThing<string>.Default;
Console.WriteLine (s == null);
}
ben C++ şablon sınıfı gibi bir sözlük yazmak niyetinde, ben varsayılan dönmek dicti istiyorum Verilen anahtarın bulunmaması durumunda jenerik TVal türünün değeri (sıfır). C# 'de, varsayılan (T) yapı kurtarmaya gelirken, C++' da aynı şeyi yapmanın uygun yolu olduğundan emin değilim.
gcc4.7 ile T obj = {}
ve T* obj = {}
denedim, iyi çalışıyor. Bu tür kod, taşınabilir çapraz derleyiciler ve platformlar olacaksa, dil belirtimi tarafından tanımlanan sözdizimi olursa emin değilim. Lütfen yardımcımla bana yardım et! Şimdiden teşekkürler!
PS:
~~~~~~~~~~
bile bunlardan çağrılabilir yok, şablon HERHANGİ BİR tipi varsayılan (sıfır dışında) değeri elde emin olmak için varsayılan ctor, ben (avakar cevabı esinlenerek) şu mekanizmayı istihdam:
template<class T>
struct AnyThing
{
static const T& Default ;
private:
static const char temp[sizeof(T)];
};
template<class T> const char AnyThing<T>::temp[] = {};
template<class T> const T& AnyThing<T>::Default = *(T*)temp;
struct st
{
double data;
st()=delete;
};
int main()
{
cout << (int)AnyThing<char*>::Default<<endl; //0
cout << AnyThing<int>::Default<<endl; //0
cout <<AnyThing<st>::Default.data<<endl; //0
}
Bu çirkin görünüyor, ama hepsi bir sıfırlanmasını nesne boş bellek sadece bir yığın sonra, herhangi bir sorun neden olmamalıdır. Yanlış mıyım?
http://stackoverflow.com/questions/1962600/what-is-the-c-cli-eşdeğer-to-cs-defaultt – Khurshid
Bu sorununuzu çözerse tamamen emin değilim, ama düşünüyorum [Boo st.Value Initialized] (http://www.boost.org/doc/libs/release/libs/utility/value_init.htm) bu sorunu çözmeye çalışır. –