将多个函数值返回到main()-C++

Return multiple function value to main() - C++

本文关键字:main -C++ 返回 函数      更新时间:2023-10-16

是否有方法将多个值返回到一个函数?在我正在开发的一个程序中,我希望从一个有2个参数的函数中向主函数返回2个矩阵,当函数在main中调用时,它将在2个矩阵中返回值,所有统计数据都需要继续执行程序。我没有找到真正做到这一点的方法。如有任何帮助,我们将不胜感激,谢谢。例如

int main() {
   Matrix a,b=function(p,q);
   ...
}
std::tuple<Matrix, Matrix> function(int p, int q) {
   // ...
   return std::make_tuple(a, b);
}
int main() {
   Matrix a, b;
   std::tie(a, b) = function(p, q);
   // ...
}

在C++中,您有几种可能性。以下是一些:

如果您有固定数量的对象要返回,请添加一个具有适当数量对象的结构,例如:

struct FunctionResult { Matrix a, b; };
FunctionResult result = function(p, q);
doSomething(result.a, result.b);

如果要返回的对象数是可变的,则返回一个标准容器,例如std::vector、std::deque等:

std::vector<Matrix> result = function(p, q);

如果含义合适,并且您总是需要返回2个对象,则可以返回std::对,但最好使用专用结构,以便您可以用有意义的名称命名对象:

std::pair<Matrix> result= function(p, q);
doSomething(result.first, result.second);

以类似的方式,您可以返回一个std::tuple,这样您就可以执行:

Matrix a, b;
std::tie(a, b) = function(p, q);

这可能与您的建议和python最相似,但由于名称的原因,我最好使用专用结构。在所有其他情况下,返回对象之间的对应关系都无法强制执行,并且属于同一类型,我可以想象它们可以很容易地互换。

如果您想使用std::tuple方法,但编译器不支持它,请查看boost::tuple。

如果要返回多个值,可以将对输出存储的引用作为函数的参数传递。

void myFunction(int p,int q, cv::Mat& out1, cv::Mat& out2);

返回一个指向矩阵的智能指针的std::向量。