السلام عليكــم ورحمـة الله وبركاتــه ،،
المشكله كالتالى ,, لدينا Template class نريد ان نصنع منه Specialization لاى سبب من الاسباب المتعدده لذلك
جيد ,, المشكله الان انه ليس كل دوال ال class تحتاج / تستفيد من ذلك انما بعضها فقط
هنا نأتى الى مشكله انه من غير المنطقى لاسباب كثيره معروفه ان اعيد كتابه الكود هنا وهناك ,, اريد ان اكتبه مره واحده فقط ويستخدمه الاثنان
المشكله على ما يبدو ان هذا لا يعمل مع ال Partial Specialization
الكود التالى لا يعمل :
[color= #0000ff;]template [color= #000000;]<[color= #0000ff;]class T1,[color= #0000ff;]class T2[color= #000000;]>
[color= #0000ff;]class A
[color= #000000;]{
[color= #0000ff;]public[color= #000000;]:
[color= #0000ff;]virtual [color= #0000ff;]void max[color= #000000;](T1 a,T2 b[color= #000000;])
[color= #000000;]{
cout[color= #000000;]<<[color= #A31515;]"max called T1,T2 ,b="[color= #000000;]<<b[color= #000000;]<<endl;
[color= #000000;]}
[color= #0000ff;]void mmax[color= #000000;](T1 a,T2 b[color= #000000;])
[color= #000000;]{
cout[color= #000000;]<<[color= #A31515;]"mmax called b="[color= #000000;]<<b[color= #000000;]<<endl;
[color= #000000;]}
[color= #000000;]};
[color= #0000ff;]template [color= #000000;]<[color= #0000ff;]class T1[color= #000000;]>
[color= #0000ff;]class A[color= #000000;]<T1,[color= #0000ff;]float[color= #000000;]>
[color= #000000;]{
[color= #0000ff;]public[color= #000000;]:
[color= #0000ff;]void max[color= #000000;](T1 a,[color= #0000ff;]float b[color= #000000;])
[color= #000000;]{
cout[color= #000000;]<<[color= #A31515;]"max called T1,T2 ,b="[color= #000000;]<<b[color= #000000;]<<endl;
[color= #000000;]}
[color= #0000ff;]void mmax[color= #000000;](T1 a,T2 b[color= #000000;]); [color= #007f00;]// whether this line is here or deleted
[color= #000000;]};
[color= #0000ff;]int _tmain[color= #000000;]([color= #0000ff;]int argc, _TCHAR[color= #000000;]* argv[color= #000000;][[color= #000000;]][color= #000000;])
[color= #000000;]{
A[color= #000000;]<[color= #0000ff;]int,[color= #0000ff;]float[color= #000000;]> asd;
asd.[color= #808000;]max[color= #000000;]([color= #ff0000;]1,[color= #ff0000;]2.5[color= #000000;]);
asd.[color= #808000;]mmax[color= #000000;]([color= #ff0000;]2,[color= #ff0000;]3.25[color= #000000;]);[color= #007f00;]//it fails here
[color= #0000ff;]return [color= #ff0000;]0;
[color= #000000;]}الطريقه الوحيده التى عملت معى هى ادخال ال Inheritance فى الموضوع
كالتالى :
[color= #0000ff;]template [color= #000000;]<[color= #0000ff;]class T1,[color= #0000ff;]class T2[color= #000000;]>
[color= #0000ff;]class A
[color= #000000;]{
[color= #0000ff;]public[color= #000000;]:
[color= #0000ff;]virtual [color= #0000ff;]void max[color= #000000;](T1 a,T2 b[color= #000000;])
[color= #000000;]{
cout[color= #000000;]<<[color= #A31515;]"max called T1,T2 ,b="[color= #000000;]<<b[color= #000000;]<<endl;
[color= #000000;]}
[color= #0000ff;]void mmax[color= #000000;](T1 a,T2 b[color= #000000;])
[color= #000000;]{
cout[color= #000000;]<<[color= #A31515;]"mmax called b="[color= #000000;]<<b[color= #000000;]<<endl;
[color= #000000;]}
[color= #000000;]};
[color= #0000ff;]template [color= #000000;]<[color= #0000ff;]class T1[color= #000000;]>
[color= #0000ff;]class dA [color= #000000;]: [color= #0000ff;]public A[color= #000000;]<T1,[color= #0000ff;]float[color= #000000;]>
[color= #000000;]{
[color= #0000ff;]public[color= #000000;]:
[color= #0000ff;]void max[color= #000000;](T1 a,[color= #0000ff;]float b[color= #000000;])
[color= #000000;]{
cout[color= #000000;]<<[color= #A31515;]"derived max called T1,T2 ,b="[color= #000000;]<<b[color= #000000;]<<endl;
[color= #000000;]}
[color= #000000;]};
[color= #0000ff;]int _tmain[color= #000000;]([color= #0000ff;]int argc, _TCHAR[color= #000000;]* argv[color= #000000;][[color= #000000;]][color= #000000;])
[color= #000000;]{
dA[color= #000000;]<[color= #0000ff;]int[color= #000000;]> asd;
asd.[color= #808000;]max[color= #000000;]([color= #ff0000;]1,[color= #ff0000;]2.5[color= #000000;]); [color= #007f00;]//derived max called
asd.[color= #808000;]mmax[color= #000000;]([color= #ff0000;]2,[color= #ff0000;]3.25[color= #000000;]);[color= #007f00;]//mmax called
[color= #0000ff;]return [color= #ff0000;]0;
[color= #000000;]}هل هذه الطريقه هى ما يستخدم عاده ؟ هل هناك طرق اخرى ؟ اى مشاكل معروفه فى ال Performance ؟
شكراً


