C++のテンプレート、どうすべ
僕は、幸か不幸か、強い制約があるプロジェクトってあんまりやったことない(幸だな)。昔、「再帰は禁止」という規則に出会ったことはある。理由は分かりにくくなってメンテナンスに支障がある、だった。ナニイッテンダ、と思った。スタックが少ないとかの理由なら分かるが、再帰は分かりやすいだろうよな。ツリーを舐めるコードを再帰なしで書いたらよっぽど分かりにくいだろうよ。
それはともかく。
C++テンプレートは、「分かりにくくなってメンテナンスに支障がある」と禁止されても、まーしょうがない気がする。現状、そんな規則はないし、使って文句言われるようなこともないのだが、使うのは気が引ける。
自主規制としては:
- 実装のために使って、ライブラリの利用者にはテンプレートを意識させない。
- 似たような処理があって、コピペするか、間接参照の階層を増やすしかないときに使う。無闇には使わない。
- テンプレートが入ったファイルは、インターフェースじゃなくて実装の一部である(したがってユーザーは気にする必要ない)と分かるようにする。
つまり、テンプレートライブラリを提供するのではなくて(誰も望んでないから)、型が具体的なライブラリを提供するが、仕掛けとしてこっそりテンプレートが使われている、と。そんな感じだろう。