当对象本身是参数时,使用 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());