繁体   English   中英

C ++:默认参数和向量

[英]C++: Default Arguments and Vectors

在C ++中,我希望有一个函数,该函数采用vector类型的可选参数。 如果未提供参数,则我希望变量的大小为0。

void v_connect::import(vector<int> vid_,vector<double> vpos_,vector<int> vbd_,vector<int>    bd_ss_=std::vector<int>() )

但这是行不通的。 基本上,如果用户提供了可选参数bd_ss_我想检查bd_ss_.size()!=0 ,然后再做一些额外的工作。 如果用户不提供参数,则我想要bd_ss.size()==0 这可能吗?

无法判断用户是否提供了可选参数。 但是,您可以使用重载:

void v_connect::import(
    std::vector<int> vid_,
    std::vector<double> vpos_,
    std::vector<int> vbd_,
    std::vector<int> bd_ss_) 
{
    check(!bd_ss_.empty());
    do_extra_stuff();
    do_import(vid_, cpos_, vbd_, bd_ss_);
}

void v_connect::import(
    std::vector<int> vid_,
    std::vector<double> vpos_,
    std::vector<int> vbd_) 
{
    do_import(vid_, cpos_, vbd_, std::vector<int>());
}

// private:
void v_connect::do_import(
    std::vector<int> vid_,
    std::vector<double> vpos_,
    std::vector<int> vbd_,
    std::vector<int> bd_ss_)
{
    // common import code goes here
}

您可以使用户改为传递指针:

void foo(std::vector<int> * ov = NULL)
{
    std::vector<int> dummy;
    std::vector<int> & bd_ss_ = ov ? *ov : dummy;

    if (ov) assert(!bd_ss_.empty());

    // ...
}

另外,也可以使用Boost.optional ,它是围绕此想法的聪明的C ++样式包装器,并允许您通过无缝接口具有相同的行为。

可选参数放在标头中,而不是cpp中。

顺便说一句,您正在混合vector和std :: vector,使用其中一个(最好坚持使用std :: vector)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM