我想要定義一個模板函數誰有一個類型參數和一個非類型的參數。但是,非類型參數的類型取決於類型參數。它看起來像如下:非類型的模板參數,其類型取決於另一個參數
template<typename T>
class A{
typedef T* Pointer;
};
template<typename T, A<typename T>::Pointer P>
T fun(){
return *P;
}
int main(){
fun<int, (int*)0>();
}
如果我編譯代碼,編譯器會抱怨:
test.cpp:6:34: error: template argument 1 is invalid
template<typename T, A<typename T>::Pointer P>
^
test.cpp:6:45: error: expected ‘>’ before ‘P’
template<typename T, A<typename T>::Pointer P>
^
我應該怎麼做才能讓我的代碼工作?謝謝!
PS。上面的代碼只是結構的一個例子。我知道代碼本身是沒有意義的。
謝謝!你能解釋一下或者給出一個關於在這種情況下爲什麼需要'typename'的參考嗎? – james
http://stackoverflow.com/a/8584507/481267 – Brian