2015-10-01 84 views
1

如何將指向C樣式數組的指針傳遞給模板函數?帶有char []參數的C++模板

下不會出現錯誤編譯像error: no matching function for call to 'func(char (*)[2])'

// What do I need to change on the next line to make this compile? 
template<typename T> bool func(T **var) 
{ 
    return var == 0; 
} 

int main() { 
    char ar[2] = { 1, 2 }; 
    func(&ar); 

    return 0; 
} 

template<typename T> bool func(T *var[])也不起作用。

回答

1

簡單:

template<typename T> bool func(T* var) 
{ 
    return var == 0; 
} 

func(&ar);Tchar[2]T*char (*)[2]

甚至:

template<typename T> bool func(T var) 
{ 
    return var == 0; 
} 

func(&ar);Tchar (*)[2]

如果要限制C數組,你可以這樣做:

template<typename T, std::size_t N> bool func(T (*var)[N]) 
{ 
    return var == 0; 
} 
+0

最後一點是我正在尋找的。謝謝! – monkbroc

0

template<typename T> bool func(T** var) 

傳遞&arr,這類型的指針數組char(*)[2]時,T不能推導。編譯器嘗試將T**char(*)[2]匹配,並且未能找到匹配項。請記住char[2]是一個數組類型,不是指針,並且在匹配模板時不衰減到指針。通過使用

template<typename T> bool func(T* var) 

所以現在T可以推斷爲char[2],並var將是char(*)[2]類型的幫助編譯器。或者你可以簡單地只使用

template<typename T> bool func(T var) 

在這種情況下T推導爲char(*)[2]varchar(*)[2]類型也。