Di conseguenza, all'interno di questo metodo typename definisce correttamente il tipo passato, ad esempio int, ma nel costruttore B typename è già uguale a stringa.
Il risultato di typename è sempre di tipo stringa, in altre parole typename può essere rappresentato convenzionalmente come una funzione
A100: il risultato di typename è sempre di tipo stringa, in altre parole
Non è quello che intendo. typename restituisce una stringa contenente il nome del tipo. All'interno di un metodo di una classe templata, la stringa con il tipo è "int", e all'interno del costruttore chiamato da lì, la stringa contiene "string".
Stanislav Korotky: Non è quello che intendo. typename restituisce una stringa con il nome del tipo. All'interno del metodo della classe templata, la stringa con il tipo è "int", e nel costruttore chiamato da lì, la stringa 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 );
}
Ragazzi, è un bug del mercato o è completamente normale?
Non ho provato, ma non dovrebbe funzionare se è legato all'hardware e non al sistema operativo. È come togliere il disco rigido e metterlo su un'altra scheda madre con un video diverso. Inizierà subito a cercare nuovi piloti.
Una chiamata a una funzione virtuale in un'istanza di una classe derivata risulta in una chiamata a quella funzione dalla classe base, non dalla classe derivata.
Una chiamata a una funzione virtuale in un'istanza di una classe derivata risulta in una chiamata a quella funzione dalla classe base, non dalla classe derivata.
Questo è sempre il caso nel costruttore. Perché? -> google C++ (aggiungere la parola costruttore alla stringa della query)
A100: Lo fanno sempre nel costruttore. Perché? -> google C++ (aggiungere la parola costruttore alla stringa della query)
Grazie, non lo sapevo) Sarebbe bene aggiungerlo in MQL5 Reference, sai, dove si parla di funzioni virtuali e costruttori. Non è così in tutte le lingue.
Consenti l'uso dei cookie per accedere al sito MQL5.com.
Abilita le impostazioni necessarie nel browser, altrimenti non sarà possibile accedere.
Hai effettuato l'accesso. L'autenticazione a due fattori è stata disattivata. Configurala di nuovo e scansiona un nuovo codice QR, oppure continua con l'autenticazione a due fattori disattivata.
A100:
Hai ragione. Breve e chiaro, senza parole inutili. Ho pubblicato un codice funzionante.
Di conseguenza, all'interno di questo metodo typename definisce correttamente il tipo passato, ad esempio int, ma nel costruttore B typename è già uguale a stringa.
il risultato di typename è sempre di tipo stringa, in altre parole
Non è quello che intendo. typename restituisce una stringa con il nome del tipo. All'interno del metodo della classe templata, la stringa con il tipo è "int", e nel costruttore chiamato da lì, la stringa contiene "string".
Il compilatore non segnala un errore se manca #endif
Preferibilmente, dovrebbe, altrimenti gli errori difficili da trovareRisultato: int.
Ragazzi, è un bug del mercato o è completamente normale?
Non ho provato, ma non dovrebbe funzionare se è legato all'hardware e non al sistema operativo. È come togliere il disco rigido e metterlo su un'altra scheda madre con un video diverso. Inizierà subito a cercare nuovi piloti.
O sto fraintendendo la macchina virtuale?
Una chiamata a una funzione virtuale in un'istanza di una classe derivata risulta in una chiamata a quella funzione dalla classe base, non dalla classe derivata.
Una chiamata a una funzione virtuale in un'istanza di una classe derivata risulta in una chiamata a quella funzione dalla classe base, non dalla classe derivata.
Lo fanno sempre nel costruttore. Perché? -> google C++ (aggiungere la parola costruttore alla stringa della query)
Grazie, non lo sapevo) Sarebbe bene aggiungerlo in MQL5 Reference, sai, dove si parla di funzioni virtuali e costruttori. Non è così in tutte le lingue.