C++でvariant型オブジェクト

C++でプログラミング中。ひとつのList型コンテナに複数の型のオブジェクトを乗せるために、variant型のクラスを考えてみた。

テンプレートと仮想関数をうまくつかってできないものか考えたが、結局できなかった。boostにもvariant型クラステンプレートがあるが、やっていることは対応する型の数だけ、同じメンバ関数をオーバーライドしていて、おいらが考えたものとほとんど同じ。

結局のところ、こういうことをしたい。

variant var;
int i,j=0;
var=j;
i=var;

値を代入するほうは、operator=() を対応可能な型の数だけオーバーライドすればいいけど、問題は他の型のオブジェクトにvariantから値を入れるとき。

C++は戻り値による関数オーバーライドはできないので、取りたい型ごとに*違う名前の*メンバ関数を定義しなければならない。あるいは、代入される側のクラスで variant 用の operator=() をオーバーライドするが、既存のクラスや組み込み型には使えない。

自然に使えるvariant型を実現しようとすると、ひとつの巨大なクラスライブラリができあがっちゃううえ、それでも新たな型の追加には対応できない。

結局、必要に応じて対応する型を増やしていくしかないか。