缩短C ++函数输入参数?

时间:2017-06-08 02:09:38

标签: c++ c++11 armadillo

我们小组最近改用C ++。我的主管非常友好地提供了一个由一堆类和相关方法组成的模板。我发现的问题是大多数方法需要很多输入参数,如:

void AdvectionReactionDiffusion::boundary(const arma::Col<double>& n, const arma::Col<double>& u, const arma::Col<double>& uhat, const arma::Col<double>& fhat, arma::Col<double>& fb, arma::Mat<double>& fb_u, arma::Mat<double>& fb_uhat, arma::Mat<double>& fb_fhat) const {}

因此,为了更好的可读性和更少的人为错误,有没有什么好方法可以在不破坏代码当前结构的情况下缩短这些输入?

我来自Python背景,我将在Python中做的是将相关输入包装在命名元组中并将其抛出到函数中。但我不知道如何在C ++中应用类似的技巧。

1 个答案:

答案 0 :(得分:5)

如果您阅读ColMat上的文档,则会找到

enter image description here

enter image description here

将此与using namespace arma;文件中的cpp相结合(从不在标题!!! 中),您可以

void AdvectionReactionDiffusion::boundary(const vec& n,
                                          const vec& u,
                                          const vec& uhat,
                                          const vec& fhat,
                                          vec& fb,
                                          mat& fb_u,
                                          mat& fb_uhat,
                                          mat& fb_fhat) const {}

您标记了此问题,因此您可以返回std::tuple而不是输出参数。

std::tuple<vec,mat,mat,mat>
AdvectionReactionDiffusion::boundary(const vec& n,
                                     const vec& u,
                                     const vec& uhat,
                                     const vec& fhat) const {}

然后您可以使用std::tie

解压缩
std::tie(fb, fb_u, fb_uhat, fb_fhat) = ARD.boundary(n,u,uhat,fhat);

您当然可以对输入参数执行相同的操作。