C++ には足りないものがたくさんある。毎日のようにあああれが欲しいああこれが欲しいと思う。今日、特にほしくなったのは、typename 宣言。
何のことかというと:
class foo; void foo_func( foo * ); // foo の詳細は別の場所で。
これが合法なのに、foo はやっぱり class foo{略}; じゃなくて、typedef bar
いや、class foo : public bar
ましてや。typedef int (*foo)(int) にしたいと思ったら、派生クラスを作るのはあまり正気とは思えない。
というわけで。
typename foo; // class なのか typedef なのか、まだわからないけど型名であることだけは確か。 void foo_func( foo * ); // foo の正体は別の場所で。
というように書くことができるといいと思うんだが、そんな話は今のところ C++の設計と進化 に出てきてない。
ちなみに。typename 宣言であり、typedef 宣言ではないのは:
typedef foo; // int の省略。foo は int の別名となる。
という驚くべき仕様による。