0

在 C++ 中,我想要一个函数,该函数采用向量类型的可选参数。如果未提供参数,我希望变量的大小为 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. 这可能吗?

4

3 回答 3

9

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

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
}
于 2012-08-06T16:25:32.813 回答
4

您可以让用户传递一个指针:

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++ 风格包装器,它围绕这个想法,允许您通过无缝接口获得相同的行为。

于 2012-08-06T16:25:49.990 回答
2

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

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

于 2012-08-06T16:25:37.470 回答