当对象本身是参数时,使用类函数作为默认参数

时间:2015-12-28 20:52:15

标签: c++ templates parameters

我不知道是否可能,但我想做这样的事情:

template <typename T>
int search(T array, int first = 0, int last = array.size())
{

}

这里T应该是一个容器,我想知道它的大小并将其用作默认参数。这可能吗?

编辑:是的,犯了一个错误,不是T而是数组。

2 个答案:

答案 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());