- 648 名前:デフォルトの名無しさん mailto:sage [2006/05/25(木) 13:11:41 ]
- >>646
>>643さんが指摘されてる、クラステンプレートの部分特殊化による手法の問題は、 class Aに対してstd::hooks::???_traits<A>を実装したとして、 その後AのサブクラスであるB,C,...Zを作成した際に 全く同じstd::hooks::???_traits<B>, ... std::hooks::???_traits<Z>を 実装しなければならないということだと思うのですが。 この点、ADLの場合は基底クラスを引数にとる関数一つで用は足ります。 派生クラスと基底クラスの関係は、 オーバーロード解決では考慮されますが(部分)特殊化の解決では考慮されません。 >>643のコードを見る限り、operator+(T,T)の部分特殊化として operator(const complex<T>&, const complex<T>&)を定義しているようですが、 これでは、>>643で言及された問題は解決できません。 ただし、ADLがない世界を仮定して、更にlazyoverload云々を無視して 普通のオーバーロードだと考えれば、>>643の問題はないように思います。 これは、hook用名前空間を1ヶ所用意して、 特殊な動作は全部そこに書く/書かせるということと同じでしょう。 もちろん名前空間の内部が第三者によって手を加えられる(特殊化ではなく)という問題はありますが。
|

|