2012-09-04 14 views
9

このためにSeachingしましたが、同様の質問は見つかりませんでした。ある場合は、この質問を閉じてください。 これは、実証するための単なる一例私の実際のコードではありません - 私はこれをコンパイルすると配列の部分的なテンプレートの特殊化

#include <iostream> 

// Normal template class with a destructor 
template <class T> class Test 
{ 
public: 
    ~Test() { std::cout << "Normal \n";} 
}; 

// Partial specialization for arrays 
template<class T> class Test<T[]> 
{ 
public: 
    ~Test() { std::cout << "Array \n"; } 
}; 


int main() 
{ 
    Test<int[3]> i; 
} 

それはは、アレイ用の特殊なバージョンを呼び出すことはありません。私は

template<class T> class Test<T[3]> 
{ 
public: 
    ~Test() { std::cout << "Array \n"; } 
}; 

でテンプレートを置き換える場合、それはは専門を呼ぶんが、私は、これはspecifedサイズの任意の配列だけでなく、もののために呼ばれるようにしたいです。すべての配列に使用される特殊化を書く方法はありますか?

+0

は、私は完全にわからないんだけど、私はあなたが、未知の大きさの配列のための専門がある書かれたものだと思います。これは不完全な型ですが、他のTUが提供する配列の 'extern'宣言で使用できます。 –

答えて

17

キャプチャ追加の非型パラメータを持つサイズ:

#include <iostream> 

template <class T> class Test 
{ 
public: 
    ~Test() { std::cout << "Normal \n";} 
}; 

template<class T, size_t N> class Test<T[N]> 
{ 
public: 
    ~Test() { std::cout << "Array " << N << '\n'; } 
}; 

int main() 
{ 
    Test<int[3]> i; // Array 3 
    Test<int[5]> j; // Array 5 
} 
関連する問題