Erreurs, bugs, questions - page 1965

 

Comment initialiser un membre statique d'une classe modèle en MQL ?

template<typename T>
class xxx
{
  static int value;
};

template <typename T>
int xxx<T>::value = -1;
 
Stanislav Korotky:

Comment initialiser un membre statique d'une classe modèle en MQL ?

S'il s'agit d'un problème simple, apportez-le à une classe de base non modèle et héritez-en. En général, je ne sais pas comment.
 
Stanislav Korotky:

Comment initialiser un membre statique d'une classe modèle en MQL ?

template <typename T>
int xxx::value = -1;
 

A100:

template <typename T>
int xxx::value = -1;

En général, bien sûr, cette méthode ne correspond pas au C++, mais elle fonctionne dans MQL.

J'ai eu un problème similaire avec la méthode en dehors de la classe :

template<typename T>
class A
{
 public:
  void f();
};

template<typename T>
void A<T>::f() { }  //'A' - identifier already used

Grâce à vous, la solution a été trouvée :

template<typename T>
void A::f() { }
Bien que cela soit également faux bien sûr, car cela signifie définir une méthode de modèle, et non une méthode d'une classe de modèle. Et si une classe contient les deux, il y aura une ambiguïté
 
Alexey Navoykov:

J'ai eu un problème similaire avec le fait de prendre une méthode en dehors de la classe :

C'est beaucoup plus pratique de cette façon. La seule restriction est que vous ne pouvez pas avoir une autre classe (comme dans l'exemple) entre les deux.

Forum sur le trading, les systèmes de trading automatisés et les tests de stratégie

Erreurs, bogues, questions

A100, 2016.05.19 23:26

Erreur de compilation

template<typename T>
class A { public:
        bool operator==( const A& ); //error: 'operator' - function must have a body
        T t;
};
class B {
        A<int> a;
};
template<typename T>
bool A::operator==( const A& )  { return false; }
void OnStart()
{
        A<int> a, b;
        Print( a == b );
}
Ошибки, баги, вопросы
Ошибки, баги, вопросы
  • 2016.05.19
  • www.mql5.com
Форум алго-трейдеров MQL5
 
Alexey Navoykov:

car cela signifie définir une méthode de modèle plutôt qu'une méthode de classe de modèle. Et si la classe contient les deux, il y aura une ambiguïté

Il n'y aura aucune ambiguïté, tout a été pensé avant nous (c). Nous devons répéter la ligne du modèle deux fois (la ligne supérieure fera référence à une classe, la ligne inférieure à une méthode)
 
A100:
Ce ne sera pas le cas - tout a été pensé avant nous (c). Vous devez répéter deux fois la ligne du modèle (la ligne du haut fera référence à la classe - la ligne du bas à la méthode).

Mec, ça a l'air vraiment foiré.

A100:
C'est beaucoup plus pratique comme ça.

Ouais, eh bien, ne pas avoir à mettre <T> est juste une commodité si sérieuse).

 
Alexey Navoykov:

Oui, ne pas avoir à mettre un <T> est une sérieuse commodité).

Je voulais dire que c'est pratique de pouvoir placer une méthode en dehors d'une classe.
 
Alexey Navoykov:

J'ai eu un problème similaire avec le fait de prendre une méthode en dehors de la classe :

C'est faux, bien sûr, car cela revient à définir une méthode de modèle plutôt qu'une méthode de classe de modèle. Et si la classe contient les deux, il y aura une ambiguïté.

Je remarque que les méthodes sont souvent placées en dehors de la classe, mais pourquoi ? J'ai regardé dans le SB, donc les "petites" méthodes sont définies dans une ligne à la fois, les "longues" méthodes sont définies en dehors de la classe. Il n'y a pas de commodité de perception, car ALT+G en définition externe offre non pas un, mais deux points de transition. Et s'il y a des surcharges, alors un multiple de deux, respectivement. Et ALT+M montre déjà tout en même temps.

Peut-être s'agit-il d'une sorte d'hommage à la clarté de la définition de l'interface, mais jusqu'à présent, je n'y suis pas entré.

 
A100:
Je voulais dire que la possibilité même de placer une méthode en dehors d'une classe est pratique.

Ouais, vous torturez et torturez encore, et ensuite il s'avère que vous auriez dû connaître certains secrets).

Peut-être qu'il y a aussi une spécialisation des classes de modèles ? Je ne sais pas, mais je suis sûr qu'ils ont une façon intelligente de le faire. Je leur ai demandé pendant longtemps dans le bureau de service et ils gardent le silence. Probablement, ils ont aussi quelques secrets. Déversement )