pImplパターンとtemplateと

pImpl作っててぶち当たった問題。ドキュメントをIteratorで渡すtemplateメソッドとしてコンストラクタを定義していたんだけど、pImpl使っちゃうとヘッダファイルにコンストラクタ置けないorz
で、templateをソースファイルに書くと、templateの利用者がどんな型を指定してくるか判らないので、実体化できない=リンクが通らない。
事前にtemplateに渡される可能性のある型をつかって明示的に実体化するんだっけ?たしかこれって、数年前はC++のかなり地雷な部分だった気がする。今はVC++gccも大丈夫なのかな?

C++って、バッドノウハウだらけというか、あるレベルを超えたら後はひたすらバッドノウハウを覚える感じで、嫌になってくる。やっぱりDに乗り換えるべき?それともJavaCLRの上で動く、高機能&高性能言語かな?ScalaとかNemerleとか。

とりあえず、Implクラスを不可能型にしないでヘッダファイルに書いちゃうことで、コンストラクタはヘッダに残す。ぐあぁぁ、カッコ悪い。

このブログに乗せているコードは引用を除き CC0 1.0 で提供します。