2009-03-21 6 views

Répondre

1

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.