[英]Template member function specialization
我有這個:
//forward declaration
template<typename Elem, int D1 = 1, int D2 = 1, int D3 = 1>
class matrix;
template<typename Elem, int D1, int D2, int D3>
struct matrix_deref_type_trait
{
typedef matrix<Elem, D2 == 1 ? 1 : D1, D3 == 1 ? 1 : D2, 1> matrix_deref;
};
template<typename Elem, int D1>
struct matrix_deref_type_trait<Elem, D1, 1, 1>
{
typedef Elem matrix_deref;
};
template<typename Elem, int D1, int D2, int D3>
class matrix:public object
{
public:
typedef typename matrix_deref_type_trait<Elem, D1, D2, D3>::matrix_deref matrix_deref;
inline matrix_deref operator[](int J)
{
...
}
}
並且想要專門為運算符[](在類體外)的情況:
template<typename Elem, int D1>
typename matrix<Elem, D1, 1, 1>::matrix_deref matrix<Elem, D1, 1, 1>::operator[](int J)
{
return M_ptr[J];
}
但是我收到了這個錯誤:
error C2244: 'matrix<Elem,D1,D2,D3>::operator []' : unable to match function definition to an existing declaration
如果沒有全班的完全專業化,我可以覆蓋這個成員函數嗎? 我該怎么辦? 謝謝。
您不能專門化模板類的非模板方法。 您只能專門化模板類本身。 或者您可以專門化任何模板方法(模板或非模板類)。
專門用於模板類的非模板方法毫無意義:編譯器需要知道整個類的外觀。 而你只是在告訴:嘿,我不關心課程,但我所知道的是這種方法的樣子。
只是專門為矩陣類:
template<typename Elem, int D1>
class matrix<Elem,D1,1,1>
{
public:
typedef typename matrix_deref_type_trait<Elem, D1, 1, 1>::matrix_deref matrix_deref;//this line
inline matrix_deref operator[](int J)
{
std::cout << "special\n";
}
};
你也不需要做?:
檢查特質類,因為如果D2
和D3
為1
,它將始終選擇特征專業化。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.