En C# Puedo escribir algo como esto:¿Cómo obtener el valor por defecto de cualquier tipo
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);
}
tengo la intención de escribir un diccionario como clase de plantilla en C++, me gustaría que el dict para devolver el valor predeterminado valor (cero fuera) del tipo de TVal genérico si no se encuentra la clave dada. En C#, el constructo por defecto (T) viene a rescatar, mientras que en C++ no estoy seguro de cuál es la forma apropiada de hacer lo mismo.
He intentado T obj = {}
y T* obj = {}
con gcc4.7, funciona bien. Simplemente no estoy seguro si es la sintaxis definida por la especificación del lenguaje, si este tipo de código será portable compiladores cruzados y plataformas. ¡Por favor ayúdame con mi doudt! ¡Gracias por adelantado!
PS:
~~~~~~~~~~
Para asegurarse de que la plantilla de obtener el valor por defecto (cero fuera) valor de cualquier tipo, incluso de aquellos que no tienen exigible Héctor defecto, que empleó siguiente mecanismo (inspirado por la respuesta de avakar):
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
}
se ve feo, pero no debe causar ningún problema, después de todo un objeto llevado a cero es sólo un trozo de memoria en blanco. ¿Me equivoco?
http://stackoverflow.com/questions/1962600/what-is-the-c-cli-equivalent-to-cs-defaultt – Khurshid
No estoy del todo seguro de que esto resuelva tu problema, pero creo que [Boo st.Value Initialized] (http://www.boost.org/doc/libs/release/libs/utility/value_init.htm) trata de resolver este problema. –