2
#include<iostream>

using namespace std;

// define the general compare template
 template <class T>
 int compare(const T& t1, const T& t2) {
   cout<< "Common_T"<<endl;
   return 0;

 }
 template<>
 int compare<const char*>( const char * const& s1,
                          const char * const& s2)
 {
    cout<< "Special_T"<<endl;
    return 0;
 }
typedef const char  char6[6];
     template<>
             int compare<char6>(const char6& s1,const char6& s2)
    {
            cout << "Special_Char6_T" << endl;
             return 0;
    }

 int main() {
     int i = compare("hello" , "world");
 }

結果は次のとおりです。

Common_T

私の質問は、「Special_Char6_T」を出力しないのはなぜですか?

4

2 に答える 2

1

これは、c文字列に一致する正しいテンプレートの特殊化です。

typedef char char6[6];
template<> int compare<char6>(char6 const &s1,char6 const &s2)
{
    cout << "Special_Char6_T" << endl;
    return 0;
}
于 2012-08-02T05:51:21.850 に答える
-1

直感的には、配列の次元はその型の一部ではないためです。その次元は、変数とフィールドに対してのみ重要です。だから両方

  char hello[6]="hello";

  char longstring[] = "a very very long string should be here";

両方とも同じタイプchar[]

 typedef char t1[6];

 typedef char t2[];

「同じ」タイプのエイリアスです。

(手がかりを得るために、壊れた関数名を見ることができます)

于 2012-08-02T05:50:37.847 に答える