鍋あり谷あり

テーマを決めずに適当に書いています。

型名であると宣言したい

C++ には足りないものがたくさんある。毎日のようにあああれが欲しいああこれが欲しいと思う。今日、特にほしくなったのは、typename 宣言。
何のことかというと:

class foo;
void foo_func( foo * );
// foo の詳細は別の場所で。

これが合法なのに、foo はやっぱり class foo{略}; じゃなくて、typedef bar foo; にしよう、と思うと、上記のようなことを書く方法がない。
いや、class foo : public bar{}; にすればいいと、きっと Bjarne さんは言うのだろうが、bar にコンストラクタがたくさんあったらそうも行かない。
ましてや。typedef int (*foo)(int) にしたいと思ったら、派生クラスを作るのはあまり正気とは思えない。

というわけで。

typename foo; // class なのか typedef なのか、まだわからないけど型名であることだけは確か。
void foo_func( foo * );
// foo の正体は別の場所で。

というように書くことができるといいと思うんだが、そんな話は今のところ C++の設計と進化 に出てきてない。

ちなみに。typename 宣言であり、typedef 宣言ではないのは:

typedef foo; // int の省略。foo は int の別名となる。

という驚くべき仕様による。