- 659 名前:655 mailto:sage [2009/06/14(日) 22:31:03 ]
- >>656-658
言いたかったのは、 Modern C++ Design 30ページより > ・クラス・テンプレートのメンバ関数については完全な特殊化ができるものの、メンバ関数の部分的な特殊化はできません。 > ・ネームスペース・レベルにおける関数(非メンバ関数)の部分的な特殊化はできません。 > ネームスペースレベルにおけるテンプレート関数に対して許されている機能のうち、部分的な特殊化に最も近いものはオーバーロードです。 > つまり実用上は、関数パラメータに対してのみ(戻り値や内部的に使用される型は適用できません)細かい粒度の特殊化能力を与えることができるわけです。例えば: > template <class T, class U> T Fun(U obj);// 一次テンプレート > template <class U> void Fun<void, U>(U obj);// 部分的な特殊化(不正) > template <class T> T Fun(Windows obj);// オーバーロード(正当) そして template <class T> void Function(T x, Hoge/*ダミー*/); ではなく template <class T> void Function(T x, boost::type<Hoge>/*ダミー*/); とすることによって実行速度に影響を与えずオーバーロードを解決できる(boost::type<T>のサイズが0のため)。
|

|