OOP, modelli e macro in mql5, sottigliezze e usi - pagina 13

 

Proprio ieri stavamo discutendo di questo bug con i metodi astratti, ma oggi mi sono imbattuto nello stesso bug nel mio codice ) Avevo un metodo virtuale non astratto nella classe base, quindi mi riferivo ad esso dalle classi ereditate, poi ho deciso di rendere il metodo astratto, ma il compilatore non mi ha informato che non era più riferibile. Di conseguenza, l'errore di ricorsione era il più brutto e il più difficile da rilevare, e ho ucciso un sacco di tempo. Ora penso che la caratteristica con il corpo del metodo astratto predefinito sarà molto utile qui, almeno fino a quando questo bug non sarà risolto.

 
Alexey Navoykov:

Sì, per rendere il più comodo possibile l'assegnazione delle mosche alle cotolette, e nessuno ha battuto ciglio)

Se il processo di assegnazione porta le mosche alle cotolette (o produce un errore se non è possibile), non c'è niente di sbagliato.

Alexey Navoykov:

1.Bene, allora è solo la classe A. Perché dichiarare un modello se il suo parametro non ha alcun significato per il comportamento della classe?

2) È un problema troppo grande. Trasferire il controllo del tipo alla fase di esecuzione... I vostri codici richiederanno anni per il debug

1. "Solo la classe A" non può contenere un campo di tipo arbitrario senza la sua parametrizzazione (di classe). E senza queste danze, che ho descritto, è impossibile fare una gestione uniforme di un parametro di classe per riferimento e per valore.

2. Lo avete già come un mantra - in questo caso un record assolutamente inequivocabile che garantisce che F è T, cioè come se non ci fosse nessun record del secondo modello. ma no. Di nuovo "passerò anni a fare il debug" ))))))

 
Ilya Malev:

1. "Solo la classe A" non può contenere un campo di tipo arbitrario senza la sua parametrizzazione (di classe). E senza quei ritocchi che ho descritto, è impossibile fare una gestione uniforme di un parametro di classe per riferimento e per valore.

2. Lo avete già come un mantra - in questo caso un record assolutamente inequivocabile che garantisce che F è T, cioè come se non ci fosse nessun record del secondo modello. ma no. Ancora una volta "passerò anni a fare il debug dopo" ))))))

E perché rispondi in questo thread? Codice in un posto, discussione in un altro... )

1. Sì, tutto può essere fatto umanamente e quasi senza ballare:

struct __A
{
  template<typename T>
  void f(T&) { }  // Сюда структуры и классы
};

struct A : __A
{
  template<typename T>  
  void f(T) { }  // Сюда простые типы и указатели
};

2. Non è di questo che stavo parlando, ma non importa.

 
Alexey Navoykov:

Perché rispondi in questo thread? Codice in un posto, discussione in un altro... )

1. Sì, tutto può essere fatto in modo umano, e quasi senza ballare:

2. C'era qualcos'altro, ma non è questo il punto.

Non è che sei ancora un moderatore, per determinare in quale thread ciò che è più appropriato. E i moderatori hanno già chiarito che le discussioni sulle caratteristiche non dovrebbero essere tenute nel ramo delle caratteristiche stesse, ma in un ramo separato, cioè qui.

Nella tua descrizione, non è affatto chiaro come riferirsi uniformemente a un metodo di classe per riferimento e per un valore di tipo T. Non so cosa intendiate con questo, ma era esattamente quello che intendevo.

 
Ilya Malev:

Non è che sei ancora un moderatore, per determinare quali thread sono più appropriati. E i moderatori hanno già chiarito che la discussione delle caratteristiche non dovrebbe essere tenuta nel ramo delle caratteristiche, e in un thread separato, cioè qui.

Quindi, se un moderatore vuole spostarlo, è una cosa, ma perché creare la confusione da soli? Io, per esempio, non ho alcun desiderio di scorrere le discussioni.

 
Alexey Navoykov:

Quindi, se un moderatore vuole spostarlo, è una cosa, ma perché creare la confusione da soli? Io, per esempio, non ho alcun desiderio di scorrere le discussioni.

Se sai che un moderatore farebbe una cosa del genere è sempre meglio farlo da solo piuttosto che aspettare che lo faccia un moderatore. Tuttavia, discutere le azioni dei moderatori non è nemmeno uno dei menu preferiti dai moderatori, quindi sarebbe meglio smettere.

 
Alexey Navoykov:
Сюда простые типы и указатели

Per i puntatori, tra l'altro, è logico fare un metodo separato con l'argomento T*, perché sicuramente non c'è confusione, e il vantaggio è che spesso la gestione dei puntatori è diversa dai tipi regolari (controllo di validità, cancellazione, ecc.)

 
Alexey Navoykov:

Codice in un posto, discussione in un altro

Ecco il codice:

template<typename T>
class A
 {
public:
  A* operator<<(T&p){ Print("<< &",typename(T)); return &this; }
  template<typename F>
  A* operator<<(F p){ Print("<< ",typename(F)); return &this; }
 };

In realtà c'è un'altra soluzione oltre a questa voce: elencare per nome tutti i tipi semplici passati per valore e poi scrivere un metodo template con &, allora non ci sarà nemmeno un errore. Questa opzione è adatta a classi senza parametrizzazione intrinseca

 
Ilya Malev:

Se ti rendi conto che un moderatore probabilmente farebbe esattamente questo - è sempre meglio farlo da soli, piuttosto che aspettare che lo faccia un moderatore. Tuttavia, discutere le azioni dei moderatori non è nemmeno uno dei menu preferiti dai moderatori, quindi sarebbe meglio smettere.

Un moderatore non spezzerebbe certo la discussione in diversi thread. Probabilmente sei così ansioso di bannare anche te stesso,"senza aspettare che lo faccia un moderatore" ))
 
Ilya Malev:

Se ti rendi conto che un moderatore probabilmente farebbe esattamente questo - è sempre meglio farlo da soli, piuttosto che aspettare che lo faccia un moderatore. Tuttavia, discutere le azioni dei moderatori non è nemmeno uno dei menu preferiti dai moderatori, quindi sarebbe meglio smettere.

1. Sarebbe meglio iniziare subito a parlare di qualcosa, dove si trova questo "qualcosa", piuttosto che pensare a come il moderatore lo farebbe. Altrimenti, tutto si è davvero confuso in due thread e ora, anche se il moderatore decide che la discussione deve stare lì o lì, è un compito piuttosto laborioso spostare la discussione normalmente, conservando l'ordine e il significato dei post.

2 Discutere le azioni di un moderatore non è ogni starnuto... Non è ogni starnuto, ma quando si sfidano pubblicamente le loro azioni, sia per ristabilire l'ordine o pacificare i facinorosi. E se avete un'opinione, chi vi proibisce di esprimerla? Forse la tua opinione è un suggerimento molto razionale, ma hai paura di dirlo, per non cadere sotto il menu non amato del moderatore? Quindi è una stronzata :)