どこかで流し読みした本で見たのかもしれないが、「テンプレートはあらゆる型のオーバーロードである」というような考えが自分の中にある。オーバーロードというからには、関数テンプレートに限っての記述だったのだろうか。今まで「何か面倒、読みにくそう」という不快感からテンプレートを避けてオーバーロードでやってきましたが、どうなんでしょうね。テンプレートがよくわからないから、比較できない。
今のところ「テンプレートはあらゆる型に対応できるようにする」というような認識だが、それってどうなんだろう。認識が違う可能性は一旦おいておくとして、あらゆる型を全く同じ名前の関数が処理するなんて実装は、多く見られるものなんだろうか。正直なところ、おおよその場合では( 使う型の数 < 全ての型の数 )が成り立つだろうから、使う可能性のある型だけを選択したい。そしてそれはオーバ-ロードで出来るだろうが、使う型が増えるほど面倒なことになる。テンプレートが勝手に使われなかった型は省いてくれればいいのだけれど、そんな上手い話あるんだろうか。
何故気にするのかというと、テンプレートがあらゆる型のオーバーロードを用意してしまうなら、そもそも「その関数が扱うべきでない型」を扱う関数も用意されるはず。関数内の処理でエラーにならなければ、それは面倒なバグの原因となると考えているから。今のところ特殊化なり例外なりassertなりで防げるかもしれないと考えたが、その手間や方法の確立までの投資はおそらく、コピーペーストによる量産オーバーロードよりも大きなものとなるだろうし、結局書くコードは減らない。そして読むのもより複雑で面倒。それなら結局使う意味がよくわからないと考えてしまう。他にそれを防ぐ専用の手段があるなら全然かまわないのだけれど。
Cと比べてC++の大きな長所であるのと、実際に使う人がいることから、使うメリットはあるのだろう。・・・そうなると前提や認識が間違っていたんだろうな。もうちょっと本をしっかり読んできます。