ドレがいいんだろう

ちょっとフクザツなクラスのリストがあって、
入力するときにちょっと1処理入れたいような場合のプログラミング。

多分ドレでも実装できるんだけど、お作法的にはドレがいいんだろうなぁ。

= 
#include <list>
#include "hoge.h"

using namespace std;
class listwrapper1{
	private:
		list<hoge> hogelist;
	public:
		void append(hoge& arg);

		list<hoge>* gethogelist(void);
};

class listwrapper2{
	private:
		list<hoge> hogelist;
	public:
		void append(hoge& arg);
		list<hoge>::iterator begin();
		list<hoge>::iterator end();
};

class listwrapper3{
	private:
		list<hoge> hogelist;
		list<hoge>::iterator itHogelist;
	public:
		void append(hoge& arg);
		hoge* get(void);
		void setbegin();	// set iterator to begin()
		bool hasnext(void);
};

class hogeappender{
	public:
		static void hogeappend(list<hoge>& l,hoge& h);
};

どれにも色々一長一短がありそうなので、実装マターといえば実装マターなんだろうか。
なんとなく呼び出し元がlistをincludeしなくて言いという理由でListWrapper3で実装しようと思うのだけど、それはやめとけ!ってのがありそうだったら教えてくだせぇ。