Erreurs, bugs, questions - page 1966

 
Alexey Navoykov:

Peut-être ont-ils aussi une spécialisation dans les classes de modèles ?

Il y a si longtemps !

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

Bugs, bugs, questions

fxsaber, 2017.08.16 13:19

typedef void (*fn)();

template<typename T>
void g( T Value ) { Print(typename(Value)); }
void f() {}

void g( fn Value ) { Print(typename(Value)); }
void OnStart()
{
        g( f ); // void(*fn)()
}

Ou bien avez-vous quelque chose d'autre en tête ?


ZS l'a trouvé.

 
fxsaber:

Il y a si longtemps !

Ou bien avez-vous quelque chose d'autre en tête ?

ZS l'a trouvé.

Non, je parlais des modèles de classe, pas des fonctions.

D'ailleurs, la spécialisation des modèles de fonctions n'a pas encore été implémentée. Ce qu'ils ont appelé "spécialisation" dans votre lien pour une raison quelconque est en fait très différent. Et pour l'instant, il n'y a que la possibilité de surcharger avec des types spécifiques. C'est presque la même chose que la spécialisation, la seule différence étant que le compilateur ne contrôle pas l'identité de la signature de toutes les fonctions surchargées. Cela est nécessaire lorsque les fonctions se trouvent à différents endroits du code.

 
A100:

C'est beaucoup plus pratique comme ça.

Au cas où il n'y aurait pas de spécialisations.
 
Alexey Navoykov:

D'ailleurs, la spécialisation des modèles de fonctions n'a pas encore été réellement implémentée. Ce qu'ils appellent "spécialisation" dans votre lien n'est pas vraiment ce qu'il en est. Et pour l'instant, il n'y a que la possibilité de surcharger avec des types spécifiques. C'est presque la même chose que la spécialisation, la seule différence étant que le compilateur ne contrôle pas l'identité de la signature de toutes les fonctions surchargées. Vous pouvez en avoir besoin lorsque les fonctions sont situées dans différents fragments de code.

Je ne le comprends pas sans un exemple.

 
fxsaber:

Sans exemple, je ne comprends pas.

En fait, j'ai exagéré quand j'ai dit "à peu près la même chose". Les différences sont importantes, car seuls les arguments de fonction peuvent être surchargés, et il peut y avoir d'autres noms de type dans le modèle qui ne sont pas liés aux arguments. Et ils ne peuvent être que spécialisés. Par exemple, un modèle sans aucun argument :

template<typename T>
void f() { }

template<>
void f<int>() { }
 
Alexey Navoykov:
Une spécialisation sans argument ? )) Dans quel domaine se spécialisera-t-elle ?
 
Комбинатор:
Une spécialisation sans argument ? )) Et à quoi servira la spécialisation ?
Vous devrez décider de cela dans le corps de la fonction. Qu'est-ce qui ne va pas ici ? J'ai très souvent un tel besoin. Je dois le résoudre en passant un paramètre fictif, ce qui est très pénible.
 
Alexey Navoykov:
Quel est le problème ?
Rien si vous arrivez à le compiler et à le faire fonctionner chez les pros).
 

Immédiatement après la mise à jour vers la version 1650, lorsque l'on fait glisser un Expert Draw non compilé depuis le Navigateur/Favoris vers un graphique, au lieu que MQL5 ne puisse pas ouvrir le fichier 'Draw.ex5', un autre Conseiller Expert est lancé, à savoir ExpertMACD.

Tout a été corrigé après que la compilation de Draw soit terminée, mais c'est un fait...

Je devrais ajouter : La situation se répète - au lieu de n'importe quel conseiller expert non compilé, ExpertMACD est lancé.

 
Комбинатор:
Ce n'est pas grave si vous arrivez à le compiler et à le faire fonctionner chez les pros).

Je ne comprends pas vraiment ce qui ne va pas. Tout fonctionne.

template<typename T>
void f() { }

template<>
void f<int>() { }

int _tmain(int argc, _TCHAR* argv[])
{
  f<double>();
  f<int>();

  return 0;
}