J'ai fait une liste de classe comme un moyen de remplacer les variadic fonctions dans mon programme utilisé pour l'initialisation des objets qui ont besoin de contenir l'évolution de la liste d'éléments. La liste de classe a de l'utilisation de la syntaxe que j'aime vraiment. Cependant, je n'ai pas vu utilisé avant, donc je me demandais si je ne devrais pas utiliser tout simplement parce que de ce fait? Une base de mise en œuvre de la liste de classe ressemble à ceci...
#include <list>
#include <iostream>
template<typename T>
struct list
{
std::list<T> items;
list(const list&ref):items(ref.items){}
list(){}
list(T var){items.push_back(var);}
list& operator,(list add_){
items.insert(items.end(),add_.items.begin(), add_.items.end());
return *this;
}
list& operator=(list add_){
items.clear();
items.insert(items.end(),add_.items.begin(), add_.items.end());
return *this;
}
list& operator+=(list add_){
items.insert(items.end(),add_.items.begin(), add_.items.end());
return *this;
}
};
Cela me permet d'avoir utiliser ce code comme si...
struct music{
//...
};
struct music_playlist{
list<music> queue;
//...
};
int main (int argc, const char * argv[])
{
music_playlist playlist;
music song1;
music song2;
music song3;
music song4;
playlist.queue = song1,song2; // The queue now contains song1 and song2
playlist.queue+= song1,song3,song4; //The queue now contains two song1s and song2-4
playlist.queue = song2; //the queue now only contains song2
return 0;
}
Je pense vraiment que la syntaxe est beaucoup plus agréable qu'elle ne l'aurait été si j'avais tout exposé régulièrement un conteneur stl, et même plus agréable (et typesafe) que variadic fonctions. Cependant, depuis que je n'ai pas vu cette syntaxe utilisée, je suis curieux de savoir si je doit l'éviter, car au-dessus de tout le code doit être facilement compréhensible par d'autres programmeurs?
EDIT:
En commun avec cette question, j'ai posté cette question plus ciblée sur des solutions au problème réel.