【问题标题】:Return multiple function value to main() - C++将多个函数值返回给 main() - C++
【发布时间】:2015-12-08 09:26:05
【问题描述】:

有没有办法将多个值返回给一个函数?在我正在处理的程序中,我希望从具有 2 个参数的函数返回 2 个矩阵到主函数,当在 main 中调用该函数时,它将返回 2 个矩阵中的值,所有统计信息都需要继续通过程序.我发现没有办法真正做到这一点。任何帮助将不胜感激,谢谢。 例如

int main() {
   Matrix a,b=function(p,q);
   ...
}

【问题讨论】:

  • mat a,mat b=function(p,q);
  • 严格来说,没有。 C++ 函数返回单个值。但它可以是复合类型,例如……一对矩阵。或者,将参数作为指针或引用传递。

标签: c++


【解决方案1】:
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);
   // ...
}

【讨论】:

  • @Priyanka 如何使用指针?如果您有不同的问题,您应该提出一个新问题。
【解决方案2】:

在 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::pair,但最好使用专用结构,以便您可以用有意义的名称命名对象:

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

    • 我需要返回 int p 和 int q 并且在调用 myFunction(p,q) 的 main 中需要在其他变量中获取这些值。
    【解决方案4】:

    返回指向矩阵的智能指针的 std::vector。

    【讨论】:

      猜你喜欢
      • 2013-02-17
      • 2023-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-26
      • 1970-01-01
      • 1970-01-01
      • 2014-12-28
      相关资源
      最近更新 更多