Как получить значение по умолчанию любого типа
В C # я могу написать что-то вроде этого:
class AnyThing
{
static public T Default = default(T);
}
static void Main ()
{
int i = AnyThing.Default;
Console.WriteLine (i==0);
string s = AnyThing.Default;
Console.WriteLine (s == null);
}
Я намерен написать словарь, как шаблон класса в C ++, яМне нравится, когда dict возвращает значение по умолчанию (обнуление) общего типа TVal, если данный ключ не найден. В C # стандартная (T) конструкция приходит на помощь, в то время как в C ++ I 'Я не уверен, что является подходящим способом сделать то же самое.
мы пыталисьT obj = {}
а такжеT* obj = {}
с gcc4.7 работает хорошо. Я'Я просто не уверен, что это синтаксис, определенный в спецификации языка, если этот код будет переносимым кросс-компилятором и платформой. Пожалуйста, помогите мне с моим doudt! Заранее спасибо!
PS:
~~~~~~~~~~
Чтобы убедиться, что шаблон получает значение по умолчанию (обнуляется) ЛЮБОГО типа, даже тех, которые неу меня нет вызываемого по умолчанию ctor, я использовал следующий механизм (вдохновленный avakar 'с ответом):
template
struct AnyThing
{
static const T& Default ;
private:
static const char temp[sizeof(T)];
};
template const char AnyThing::temp[] = {};
template const T& AnyThing::Default = *(T*)temp;
struct st
{
double data;
st()=delete;
};
int main()
{
cout < (int)AnyThing