C++でvariant型オブジェクト
C++でプログラミング中。ひとつのList型コンテナに複数の型のオブジェクトを乗せるために、variant型のクラスを考えてみた。
テンプレートと仮想関数をうまくつかってできないものか考えたが、結局できなかった。boostにもvariant型クラステンプレートがあるが、やっていることは対応する型の数だけ、同じメンバ関数をオーバーライドしていて、おいらが考えたものとほとんど同じ。
結局のところ、こういうことをしたい。
variant var; int i,j=0; var=j; i=var;
値を代入するほうは、operator=() を対応可能な型の数だけオーバーライドすればいいけど、問題は他の型のオブジェクトにvariantから値を入れるとき。
C++は戻り値による関数オーバーライドはできないので、取りたい型ごとに*違う名前の*メンバ関数を定義しなければならない。あるいは、代入される側のクラスで variant 用の operator=() をオーバーライドするが、既存のクラスや組み込み型には使えない。
自然に使えるvariant型を実現しようとすると、ひとつの巨大なクラスライブラリができあがっちゃううえ、それでも新たな型の追加には対応できない。
結局、必要に応じて対応する型を増やしていくしかないか。