気分が乗らなかったので^^;、変態といわれている(※誉め言葉) boost::function のソースコードを読んでみました。
…が、ぱっと見じゃぁ、何がしたいのかわかりませんでした。(爆 ^^;
とはいえ、頑張って読んだ結果、勉強になった事も有りまして…。
function を使うとき、↓こんな具合に書きますがー
boost::function<int (int)> cFunc;
この "int (int)" って何なのよ? と自分の中ではすごい疑問でした。 仮にこんなクラスに "int (int)" を適用した場合
template<typename T>
class A
{};
この場合、T ってなんなのよ? そして、どーやって、戻り値の型か引数の型とかを判別すればよいの? とかとか…。
今回は、後者のことについてメモを書いてみたり。
戻り値の型などの判別方法ですが、こんな感じのコードになっていました。
// class template function を宣言
template<typename T>
class function;
// 特殊化 (特別化…だっけ?^^;)
template<typename R, typename A0>
class function<R (A0)>;
// 特殊化
template<typename R, typename A0, typename A1>
class function<R (A0, A1)>;
なるほど!
こうすれば、型が個別に取得できますな! これには、本当にビックリです!
やっぱり、c++の偉い人はすごいと思いました…。 同時に、自分はまだ青いなぁ…とも……。 うひー。^^;