Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
Al fin y al cabo, la cadena de herencia podría ser cualquier cosa: incluso Interfaz<CBase>, incluso Interfaz<C<B<A<CBase>>>>, hay toneladas de variantes. Tendríamos que lanzar CBase secuencialmente a todas las variantes posibles, lo cual es poco realista.
Recuerdo que iba a implementar el almacenamiento de la información sobre las interfaces en el propio objeto de la clase, y además de las almohadillas de interfaz existentes para hacer clases de interfaz independientes que funcionarían como una envoltura sobre nuestra almohadilla. Pero luego llegué a la conclusión de que todo esto es innecesario y redundante. En la práctica, nunca he visto la necesidad de fundir una clase base a ninguna interfaz, simplemente no tiene ningún sentido. La única opción es averiguar si la clase soporta esta interfaz para fines de depuración, pero no necesitamos el casting para eso.
En mi opinión, deberíamos almacenar la interfaz en la interfaz. Interface<T,CBase>::GetComparer().Compare(CBase &a, T& b); He esbozado un poco de código para un ejemplo, pero no quiero saturar el foro con demasiadas letras.
En mi opinión, la interfaz debería almacenarse en la propia interfaz. Interface<T,CBase>::GetComparer().Compare(CBase &a, T& b); He esbozado un poco de código para un ejemplo, pero no quiero saturar el foro con demasiadas letras.
Adelante, publícalo. De todos modos, no es una tontería, sino un tema de debate. Pero en ese hilo del que se trasladó la discusión aquí, sería inapropiado.
ok)
ok)
¿Por qué existe el métodoIComparer::Compare(CBase &op1, T &op2) si ambos argumentos deberían ser T
Y por qué existe el métodoIComparer::Compare(CBase &op1, T &op2) si ambos argumentos deben ser T
¿Sólo es posible comparar los mismos tipos? Mi suposición es que no lo es. Haga T==CBase y habrá ambos argumentos T )
Ah, lo tengo, entonces lo has entendido mal. La clase IComparer en tu caso debería ser como IComparer<T1,T2,CBase>. En consecuencia, el método también lo será:
Y cuando heredes la clase sobrecargarás exactamente este método, todo caerá en su sitio.Ah, ya veo, entonces lo has entendido mal. La clase IComparer en tu caso debería ser como IComparer<T1,T2,CBase>:
Y cuando se hereda una clase, se sobrecarga este método, todo caerá en su lugar.¿Y qué significa esta CBase? ¿Y por qué hay que comparar exactamente 2 valores de un mismo tipo?
¿un reparto dinámico para comparar? ¿estás loco?
una función virtual pura se escribe así -virtual int CompareTo(Number *par) = 0 ;
es el compilador el que será maldecido y no el sustituto de la excepción autoescrito.
una función virtual pura se escribe así -virtual int CompareTo(Number *par) = 0;
el compilador será maldecido en lugar del sustituto de excepción autoescrito.
No necesito que el compilador lo jure porque constantemente manipulo clases de tipo base (Number en este ejemplo). Si el compilador lo jura, el código no se ejecutará en absoluto