方法作为方法的默认参数
Method as default parameter for a method
我目前正在为 c++ 课程编写 Set-class,它是 vector<T>
.
的派生词
在某个时候,我需要实现一个名为 index()
的函数,它显然会 return(如果集合包含它)这些集合中对象的索引。
在编写整个 class 时,我到了需要重载这些 index()
方法的地步,其中两个 public。
所以这是我的两种方法:
1日。有 3 个参数:
size_t index ( T const& x,size_t const& l, size_t const& r) const
{
if(l > size()||r>size())
throw("Menge::index(): index out of range.");
//cut the interval
size_t m = (l+r)/2;
// x was found
if( x == (*this)[m])
return m;
// x can't be found
if( l==m)
return NPOS;
//rekursive part
if( x < (*this)[m])
return index(l,m,x);
return index(m+1,r,x);
}
第 2 个参数:
bool contains ( T const& elem ) const{
return index(elem, 0, size()-1)!=NPOS;
}
关键是我不想写这2个方法,如果可能的话可以合二为一。我考虑了 index()
方法的默认值,所以我会这样写方法头:
size_t index (T const& x, size_t const& l=0, size_t const& r=size()-1)const;
这给了我错误:
Elementfunction can't be called without a object
考虑到那个错误后,我尝试将其编辑为:
size_t index (T const& x, size_t const& l=0, size_t const& r=this->size()-1)const;
但这给了我错误:You're not allowed to call >>this<< in that context.
也许我漏掉了什么,但如果你们中的任何人能告诉我是否可以将方法作为默认参数调用,请告诉我。
您无法在定义默认参数时使用 this
。
The this pointer is not allowed in default arguments source.
实现此目的的通常方法是提供参数较少的重载,这相当于您要避免的初始情况。
size_t index ( T const& x,size_t const& l, size_t const& r) const;
size_t index ( T const& x ) const {
index( x, 0, size() - 1 );
}
或者,您可以考虑指定一个幻数作为默认参数,您可以在您的实现中对其进行测试。
#include <limits>
constexpr size_t magic_number = std::numeric_limits<size_t>::max();
size_t index ( T const & x, size_t l = 0, size_t r = magic_number) const
{
if(r == magic_number) {
r = size() - 1;
}
// Actual implementation
}
我目前正在为 c++ 课程编写 Set-class,它是 vector<T>
.
在某个时候,我需要实现一个名为 index()
的函数,它显然会 return(如果集合包含它)这些集合中对象的索引。
在编写整个 class 时,我到了需要重载这些 index()
方法的地步,其中两个 public。
所以这是我的两种方法:
1日。有 3 个参数:
size_t index ( T const& x,size_t const& l, size_t const& r) const
{
if(l > size()||r>size())
throw("Menge::index(): index out of range.");
//cut the interval
size_t m = (l+r)/2;
// x was found
if( x == (*this)[m])
return m;
// x can't be found
if( l==m)
return NPOS;
//rekursive part
if( x < (*this)[m])
return index(l,m,x);
return index(m+1,r,x);
}
第 2 个参数:
bool contains ( T const& elem ) const{
return index(elem, 0, size()-1)!=NPOS;
}
关键是我不想写这2个方法,如果可能的话可以合二为一。我考虑了 index()
方法的默认值,所以我会这样写方法头:
size_t index (T const& x, size_t const& l=0, size_t const& r=size()-1)const;
这给了我错误:
Elementfunction can't be called without a object
考虑到那个错误后,我尝试将其编辑为:
size_t index (T const& x, size_t const& l=0, size_t const& r=this->size()-1)const;
但这给了我错误:You're not allowed to call >>this<< in that context.
也许我漏掉了什么,但如果你们中的任何人能告诉我是否可以将方法作为默认参数调用,请告诉我。
您无法在定义默认参数时使用 this
。
The this pointer is not allowed in default arguments source.
实现此目的的通常方法是提供参数较少的重载,这相当于您要避免的初始情况。
size_t index ( T const& x,size_t const& l, size_t const& r) const;
size_t index ( T const& x ) const {
index( x, 0, size() - 1 );
}
或者,您可以考虑指定一个幻数作为默认参数,您可以在您的实现中对其进行测试。
#include <limits>
constexpr size_t magic_number = std::numeric_limits<size_t>::max();
size_t index ( T const & x, size_t l = 0, size_t r = magic_number) const
{
if(r == magic_number) {
r = size() - 1;
}
// Actual implementation
}