当对象本身是参数时,使用 class 函数作为默认参数
Use a class function as a default parameter when the object is a parameter itself
我不知道这是否可能,但我想做这样的事情:
template <typename T>
int search(T array, int first = 0, int last = array.size())
{
}
此处 T 应该是一个容器,我想知道它的大小并将其用作默认参数。这可能吗?
编辑:是的,错误的不是 T 而是数组。
您不能使用 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
改成了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());
我不知道这是否可能,但我想做这样的事情:
template <typename T>
int search(T array, int first = 0, int last = array.size())
{
}
此处 T 应该是一个容器,我想知道它的大小并将其用作默认参数。这可能吗?
编辑:是的,错误的不是 T 而是数组。
您不能使用 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
改成了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());