2017-01-20 50 views
0

我目前工作的一个集类在C++当然这是从vector<T>推导默认参数。方法作为一种方法

在我来到这里我需要实现一个名为index()功能这显然会返回(如果该集合包含的话),这些组中的对象的指数点一个点。 在写全班我来到这里我需要重载这些index()方法,这其中包括公共点。 因此,这里有我的两类方法: 1日。 3个PARAMS:

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); 

} 

第二届一个PARAM:

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.

也许我错过ED的事情,但是请让我知道如果你谁能告诉我要么是可以调用的方法作为默认PARAM,还是不行。

回答

1

你无法定义默认参数时使用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 
} 
+0

*默认参数值必须是编译时间常数。*事实并非如此。请参阅http://ideone.com/PWFFHS。 –

+0

@RSahu感谢您的纠正。 –

+0

@RSahu所以没有办法做到这一点? –

相关问题