要素の変化するリストを含む必要があるオブジェクトを初期化するために使用されるプログラムの可変個引数関数を置き換える手段として、リスト クラスを作成しました。リスト クラスには、私がとても気に入っている使用構文があります。ただ、使っているところを見たことがないので、それだけで使わないほうがいいのではないか?リストクラスの基本的な実装は次のようになります...
#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;
}
};
これにより、コードでこれを使用できるようになります...
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;
}
構文は、通常の stl コンテナーを公開した場合よりもはるかに優れており、可変個引数関数よりもさらに優れている (そしてタイプセーフである) と本当に思います。しかし、私はこの構文が使用されているのを見たことがないので、何よりもコードが他のプログラマーに簡単に理解される必要があるため、それを避けるべきかどうかについて興味がありますか?
編集:
この質問と併せて、実際の問題の解決策をより対象としたこの質問を投稿しました。