我不知道,如果它是可能的,但我想這樣做:使用一類函數的默認參數當對象是參數本身
template <typename T>
int search(T array, int first = 0, int last = array.size())
{
}
這裏T應當是一個容器我想知道它的大小並將其用作默認參數。那可能嗎?
編輯:是的,犯了一個錯誤,它不是T,而是陣列。
我不知道,如果它是可能的,但我想這樣做:使用一類函數的默認參數當對象是參數本身
template <typename T>
int search(T array, int first = 0, int last = array.size())
{
}
這裏T應當是一個容器我想知道它的大小並將其用作默認參數。那可能嗎?
編輯:是的,犯了一個錯誤,它不是T,而是陣列。
由於T
不是對象,所以不能使用T.size()
。
您可以使用函數重載來完成您正在嘗試的操作。
template <typename T>
int search(T const& array, int first, int last)
{
}
template <typename T>
int search(T const& array, int first = 0)
{
return search(array, first, array.size());
}
PS我從T
改變所述陣列的類型T const&
。這會阻止在調用函數時進行復制。
這是不可能的。相反,你應該替換最後一個默認參數正常參數,並通過容器的大小,而調用該函數,例如,
template <typename T>
int search(T array, int last, int first=0)
{
// you can also directly use array.size() here,
// so no need for extra parameter
}
vector<int> v;
v.push_back(1);
v.push_back(2);
// call search
search< vector<int> >(v, v.size());
'.size()'已被應用到該類型的對象,而不是鍵入名稱本身。 – Barmar
我想你的意思'array.size()'不是'T.size()'。修復後,我認爲你仍然需要一個單獨的過載。我也經常喜歡在那裏使用'array.size()'。但我很確定你不能。 – JSF
@JSF'array.size()'不會起作用 – Slava