Tengo estructuras y clases que me gustaría poder crear fácilmente a partir de cadenas de forma genérica, utilizando el método to!T(string)
. Sin embargo, no estoy seguro de cómo podría 'anular' el método para obtener este tipo de comportamiento. Pasar de mi tipo a la cadena es fácil (solo definiría opCast(string)
), pero ¿es lo que estoy buscando posible?Anular a! T() para T definida en uso en D?
9
A
Respuesta
11
No defina opCast
para string
si desea que su tipo se convierta a string
. Eso es lo que toString
es para. writeln
y format
y el uso como toString
, no colada o to
, y to
utilizará toString
, por lo que es definitivamente mejor para definir toString
para convertir a a string
. Defina opCast
para convertir a los tipos otros que string
. Entonces puede usar eso con casting o con to
.
Ahora, si quiere convertir un string
a su tipo definido por el usuario, simplemente defina el constructor apropiado, y eso funcionará con to
.
import std.conv;
struct S
{
int i;
this(string s)
{
i = to!int(s);
}
string toString()
{
return to!string(i);
}
}
void main()
{
auto s = to!S("42");
assert(s.i == 42);
auto t = to!string(s);
assert(t == "42");
}
Cuestiones relacionadas
- 1. El parámetro de tipo T oculta el tipo T en <T> T [] aArray (T [] a) usando Eclipse
- 2. Uso emacsclient -t al cometer en Git
- 3. Método reutilizable para transformar Iterable <T> a T []?
- 4. Implementación de zipE :: Evento t a -> Evento t b -> Evento t (a, b)
- 5. ¿Cuál es el uso de <T> en <T> T addAndReturn pública estática (elemento T, colección Colección <T>) {
- 6. Unificación de tipo genérico: parámetros múltiples (T, T) frente a listas de parámetros múltiples (T) (T)?
- 7. T-SQL ¿Sobrecarga de función definida por el usuario?
- 8. Diferencia entre <T extends A> void foo (T t) y void foo (A a)
- 9. predeterminado (T) versus Activator.CreateInstance (T)
- 10. <T> para implementar IQueryable <T>
- 11. Comparar byte [] a T
- 12. Ejecutar objeto a T
- 13. Mejor uso de índices en tablas temporales en T-SQL
- 14. ¿Ruta relativa en t sql?
- 15. DateTimeOffset.Now en T-SQL
- 16. ¿Cómo uso Case/When de T-SQL?
- 17. ObservableCollection (Of T) vs BindingList (Of T)?
- 18. Command-T en emacs
- 19. resuelve automáticamente Interface <T> a Implementación <T> en StructureMap (sólo difieren por tipo T genérico)
- 20. ¿La forma más rápida de convertir T [,] a T [] []?
- 21. Diferencia entre `T &` y `const T &` para todos const clase
- 22. sintaxis en Python (.T)
- 23. IList <T> a ObservableCollection <T>
- 24. Cómo lanzar JObject en JSON.Net a T
- 25. ¿Cómo convierto delegar la función R <T,R> (T t) en Func <T,R>?
- 26. Las llaves en T-SQL
- 27. IList <T> a IQueryable <T>
- 28. ¿Cuál prefiere para las interfaces: T [], IEnumerable <T>, IList <T>, u otra?
- 29. ¿Hay una declaración a anteponer un elemento T a un IEnumerable <T>
- 30. Convierte caracteres especiales como '\ t' en "\ t" (una pestaña real)
¡Fantástico, no me di cuenta que era así de simple! –