Como resultado, dentro de este método typename define correctamente el tipo pasado, por ejemplo, como int, pero dentro del constructor B typename ya es igual a string.
El resultado de typename es siempre de tipo string, es decir, typename puede representarse convencionalmente como una función
A100: el resultado de typename es siempre de tipo string, es decir
No me refiero a eso. typename devuelve una cadena que contiene el nombre del tipo. Dentro de un método de la clase templada, la cadena con el tipo es "int", y dentro del constructor llamado desde allí, la cadena contiene "string".
Stanislav Korotky: No me refiero a eso. typename devuelve una cadena con el nombre del tipo. Dentro del método de la clase templada, la cadena con el tipo es "int", y dentro del constructor llamado desde allí, la cadena contiene "string".
class A { public:
template<typename T>
A( T ) { Print( typename( T )); }
};
class B { public:
template<typename T>
void f( T t ) { A a( t ); } //вызываем A::A(...)
};
voidOnStart()
{
B b;
int i = 0;
b.f( i );
}
Chicos, ¿se trata de un error del mercado o es completamente normal?
No lo he probado, pero no debería funcionar si está ligado al hardware y no al sistema operativo. Es como quitar el disco duro y ponerlo en otra placa base con otro vídeo. Comenzará a buscar nuevos conductores de inmediato.
Una llamada a una función virtual en una instancia de una clase derivada resulta en una llamada a esa función desde la clase base, no desde la clase derivada.
Una llamada a una función virtual en una instancia de una clase derivada resulta en una llamada a esa función desde la clase base, no desde la clase derivada.
Este es siempre el caso en el constructor. ¿Por qué? -> google C++ (añade la palabra constructor a la cadena de consulta)
A100: Siempre lo hacen en el constructor. ¿Por qué? -> google C++ (añade la palabra constructor a la cadena de consulta)
Gracias, no lo sabía) Sería bueno añadirlo en MQL5 Reference, ya sabes, donde se mencionan las funciones virtuales y los constructores. No es así en todos los idiomas.
A100:
Tienes razón. Corto y claro, sin palabras innecesarias. He publicado un código que funciona.
Como resultado, dentro de este método typename define correctamente el tipo pasado, por ejemplo, como int, pero dentro del constructor B typename ya es igual a string.
el resultado de typename es siempre de tipo string, es decir
No me refiero a eso. typename devuelve una cadena con el nombre del tipo. Dentro del método de la clase templada, la cadena con el tipo es "int", y dentro del constructor llamado desde allí, la cadena contiene "string".
El compilador no informa de un error si falta #endif
Preferiblemente, debería, de lo contrario los errores difíciles de encontrarResultado: int.
Chicos, ¿se trata de un error del mercado o es completamente normal?
No lo he probado, pero no debería funcionar si está ligado al hardware y no al sistema operativo. Es como quitar el disco duro y ponerlo en otra placa base con otro vídeo. Comenzará a buscar nuevos conductores de inmediato.
¿O estoy entendiendo mal la máquina virtual?
Una llamada a una función virtual en una instancia de una clase derivada resulta en una llamada a esa función desde la clase base, no desde la clase derivada.
Una llamada a una función virtual en una instancia de una clase derivada resulta en una llamada a esa función desde la clase base, no desde la clase derivada.
Siempre lo hacen en el constructor. ¿Por qué? -> google C++ (añade la palabra constructor a la cadena de consulta)
Gracias, no lo sabía) Sería bueno añadirlo en MQL5 Reference, ya sabes, donde se mencionan las funciones virtuales y los constructores. No es así en todos los idiomas.