私は C++ の初心者で、「C++ Primer Plus」という本を使って言語を独学し、プログラミングをより快適に行えるようにしています。
関数テンプレートのトピックに関連する本でいくつかの演習を行っていましたが、2 つの質問があります。
次の明示的な特殊化が機能しない理由がわかりません。
template <typename T>
T lesser(T a, T b)
{
return a > b ? a : b;
}
template <>
box lesser<box>(box& a, box& b)
{
return a.volume > b.volume? a : b;
}
タイプボックスの構造を持っていると仮定すると、タイプを「box&」タイプに特化できず、「ボックス」タイプに特化できないのはなぜですか? 2 番目の宣言は、「lesser() テンプレートを使用して関数定義を生成しないでください。代わりに、別の特殊な関数を使用してください」という意味です。それでも、type box& は使用できず、type box しか使用できません。何故ですか?
編集:わかりました、2番目の問題は自然に消えました。