[英]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.