Juste une question rapide et simple, mais ne pouvait pas trouver dans toute la documentation. Il compile avec g ++, mais je ne suis pas sûr que ce soit un usage valide. Est-ce?Opérateur d'assignation de modèle: C++ valide?
Répondre
Oui, ce code est correct. Voir ce tutoriel modèles C++ pour plus d'informations
valide C++, mais il n'a rien à voir avec un opérateur d'affectation ?! basé sur un modèle L'extrait définit un membre statique de SomeClass<T>
et définit sa valeur initiale sur NULL
. C'est bien aussi longtemps que vous ne le faites qu'une fois sinon vous marchez sur le redouté One Definition Rule
.
Un opérateur d'affectation est basé sur un modèle quelque chose comme:
class AClass {
public:
template <typename T>
AClass& operator=(T val) {
std::ostringstream oss;
oss << val;
m_value = oss.str();
return *this;
}
std::string const& str() const { return m_value; }
private:
std::string m_value;
};
std::ostream& operator<<(std::ostream& os, AClass const& obj) {
os << obj.str();
return os;
}
int main() {
AClass anObject;
anObject = 42;
std::cout << anObject << std::endl;
anObject = "hello world";
std::cout << anObject << std::endl;
return 0;
}
L'opérateur d'affectation de modèle est le plus utile pour fournir des conversions lors de l'implémentation classes de variantes comparables. Il y a un tas de mises en garde que vous devriez prendre en considération si vous allez utiliser ces bestioles cependant. Un Google search affichera les cas problématiques.
- 1. opérateur OR en C#
- 2. C# ?? opérateur à Ruby?
- 3. objectif c opérateur sens
- 4. Opérateur dynamique C#
- 5. Opérateur de modèle << instanciation explicite et en-tête
- 6. Opérateur implicite?
- 7. Linq modèle de référentiel "Specified cast is not valide" Erreur
- 8. pourquoi préférons-nous? à ?? opérateur dans C#?
- 9. Comment faire une variable "opérateur"? (C++)
- 10. opérateur Surcharge en C++ comme int + obj
- 11. C opérateur de décalage de priorité de bizarrerie
- 12. opérateur arithmétique invalide
- 13. C++ erreur de classe de modèle avec l'opérateur ==
- 14. Opérateur de liaison nouveau?
- 15. Opérateur de virgule Javascript
- 16. Si un opérateur est surchargé pour une classe C++, comment utiliser un opérateur par défaut?
- 17. C# Plage de dates DataView avec opérateur LIKE?
- 18. Est-il possible de créer un nouvel opérateur dans C#?
- 19. Opérateur istream
- 20. C++: conversion non valide de 'BaseNode *' à 'Match *'
- 21. Est-ce un code C++ valide?
- 22. modèle de C raccourci macro
- 23. C++ fonction de modèle SURCHARGE
- 24. Opérateur de résolution d'étendue sans étendue
- 25. PHP et ?? opérateur
- 26. PHP flèches de fermeture opérateur
- 27. Crash de variante non valide
- 28. compilateur ne pas créer ostream basé sur un modèle << opérateur
- 29. Comment définir une classe spécifique << opérateur en C++
- 30. Que fait cet opérateur & = dans ce code ?? (C#)
@Daniel: En outre, [cplusplus.com] (http://www.cplusplus.com/doc/tutorial/templates/) explique très bien les modèles. – Lazer