戻る


2014/02/10 16:20

また最初から作り直した方がいいのではないかという気持ち。

とりあえず、fg4cppの位置付け、これ完全にミスってる気がする。

fgppのインターフェースを全てC++のインライン関数にして、コード上ではfgppのインターフェースを使いつつも、実際にはfg用のプログラムができあがる、というものなんだけど。

現実にはそううまくいっていない。fgでは関数ポインタにしているが、fgppでは関数オブジェクトになっているところとか、ラッピングがうまくいっていないのだ。

全てインライン関数で済ましたいのだけれど、そういう関数ポインタ周りの部分には、fg4cppでインターフェースを定義し、ライブラリの方でfg4cppに対応するためのインターフェースを実装しないと使えない、といった感じだ。

fg4cppを、内部的にはfgの関数を呼び出すfgppの実装の一つ、という位置付けにした方がラッパーとしてきちんとできそう。

文字列の扱いについても、失敗してる感がすごい。

文字列型は、fgにはFgString等の宣言だけで、定義は実装するライブラリに記述、という形を取っているけど、定義もfgに定めておくべきかも。

定義を書いていないせいで、生成方法も実装するライブラリに関数として実装する必要があるが、その関数からログを出力したくても、ログのライブラリが文字列生成・破棄関数を使用することになるので、循環参照になってしまうため出力できないのだ。

そもそも文字列型なんていうのはそう複雑であったりとか、環境によって実装がまちまちなんてものではない。

文字型の配列というだけだ。加えて、長さが分かって各要素へのランダムアクセスができればそれでいい、という程度のもののはず。

その型に対して、例えば文字コード変換とか複雑なことをすることはあっても、型自体は単純なはずなのだ。

などなど色々言ったが、早い話が文字列型を定義してないせいで、他のライブラリに依存させたくないログのライブラリが文字列ライブラリに依存する結果になってしまっている、それはやだなぁ、ということ。

文字列型とかいう基本データ型に修正を加えるとなると影響範囲すごいしクソめんどくさそうなので、そんくらいなら1から作るべきかなーとか。バグ作り込んでしまいそうだし。


戻る