Je cherche à ajouter des fonctionnalités à tous les types simples en C++. Je souhaite écrire une seule classe basée sur un modèle qui prend comme paramètre modèle le type à encapsuler et dont tous les opérateurs sont définis de sorte que la classe encapsulée fonctionne exactement comme le type simple qu'elle encapsule.Encapsuler un type simple en utilisant des modèles C++
Quelque chose comme ceci:
template <typename _SimpleType_>
class Attribute
{
public:
Attribute(_SimpleType_ value){ m_value = value; }
~Attribute(){}
// Cast
operator _SimpleType_() { return(m_value); }
// Comparisons
bool operator==(const a& other) const { return a == m_value; }
etc...
private:
_SimpleType_ m_value;
}
// Use like:
Attribute<int> i = 20;
while(i)
{
if((i & 0xF) == 0)
{
i >>= 2;
}
i--;
} etc...
La question est que je suis sûr qu'il ya une charge de nuances qui doivent être traitées et les opérateurs de modèles spécialisés écrits; Y a-t-il un endroit où cela a déjà été fait pour que je puisse l'utiliser à la place? Boost est trop grand et compliqué à mettre dans mon projet mais je peux le regarder pour des pointeurs s'il y a une classe comme ça là dedans - quel est son nom s'il y en a?
Notez que vous ne pouvez utiliser que les parties de boost dont vous avez réellement besoin. Si vous avez seulement besoin de shared_ptr, ajoutez seulement shared_ptr.hpp à votre projet. La plupart des bibliothèques sont uniquement des fichiers d'en-tête, vous n'avez donc pas besoin d'ajouter quoi que ce soit à votre processus de construction. – mch