我得到了這個模板:
template <typename T>
struct List {
struct node {
T key;
node* prev;
node* next;
};
node* first = nullptr;
node* last = nullptr;
// functions
};
我需要在結構之外創建一個以 List 作為引數的函式。我嘗試了一些東西但沒有用
void palindrome(List<typename T> L)
uj5u.com熱心網友回復:
你List是一個類模板(不是模板類/結構,它不是一個類)。您不能將模板傳遞給函式。您只能將某種型別的物件傳遞給函式。List不是型別。List<double>例如是一個型別。所以你可以做例如:
void palindrome(List<double> L);
但是,我想您想將任何實體傳遞List給函式,例如 aList<double>或 aList<int>等。然后您可以使函式本身成為函式模板:
template <typename T>
template void palindrome(List<T> l);
請注意,這不是一個接受任何實體化的函式List。它只是一個模板,用 aList<int>或 a呼叫它List<double>會實體??化兩個不同的函式。
有時更通用更簡單,你也可以這樣做
template <typename L>
template void palindrome(L l);
uj5u.com熱心網友回復:
在您的函式中,型別名 T 未系結。編譯器不知道該怎么做。您需要像這樣創建一個模板函式:
template<typename T> void palindrome(List<T> t) {}
然后,編譯器將在您使用該函式時推匯出型別名 T。
uj5u.com熱心網友回復:
List是一個不同于型別別的類模板。類型別將是或等。List<int>List<double>
您可以制作palindrome一個函式模板,該模板具有某種型別的型別引數,如下所示。List<T>T
//a function template that has parameter of type List<T>
template<typename T>
void palindrome(List<T> L)
{
std::cout<<"palindrome called"<<std::endl;
}
int main()
{
List<int> l1;
//call
palindrome(l1);//T will be deduced to int
List<double> l2;
//call
palindrome(l2); //T will be deduced to double
return 0;
}
演示
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/441493.html
