我不知道是否可能,但我想做这样的事情:
template <typename T>
int search(T array, int first = 0, int last = array.size())
{
}
这里T应该是一个容器,我想知道它的大小并将其用作默认参数。这可能吗?
编辑:是的,犯了一个错误,不是T而是数组。
答案 0 :(得分:7)
由于T.size()
不是对象,因此您无法使用T
。
您可以使用函数重载来完成您正在尝试的操作。
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 const&
更改为T
。这将阻止在调用函数时进行复制。
答案 1 :(得分:0)
这是不可能的。相反,你应该将最后一个默认参数替换为普通参数,并在调用函数时传递容器的大小,例如,
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());