【C++】C++ 多返回值函数

 在一些复杂的应用中,使用多返回值的函数更加方便。从使用一个结构体到采用c++ 11新特性tuple类模板,在c++中有多种方式实现这一需要。

 通过返回一个对象来实现多返回值函数,这个方案比较直观,但在很多情况下有些小题大做了。首先,你必须去声明一个结构体。结构体常常要对使用者开放权限,因此你必须将结构体成员暴露在外部的世界。其次,你还要为结构体构建实例,尽管这一活动没人喜欢去做。

 幸运的是,如果你的函数仅仅需要两个返回值,std::pair可以很好地实现。通常make_pair被用来构建pair的实例,pair实例中两个元素可以分别地使用first和second成员来访问。使用下面的代码来说明pair方法:

std::pair<std::string , int> findPerson() {
    return std::make_pair("Joe Sixpack", 42);
}
int main(int, char**) {
    std::pair< std::string, int> person = findPerson();
    std::cout < < "Name: " << person.first << std::endl;
    std::cout << "Age: " << person.second << std::endl;
    return 0;
}

 可是当我们需要函数返回值的个数多于两个的时候需要怎样做呢?显然std::pair不适合实现函数返回值多于2个的情况,我们可以使用Boost Tuple库中的boost::tuple实现。如果你已经正在使用std::pair,那么熟练使用boost::tuple将是小菜一碟。使用make_tuple来创建一个tuple对象,它的元素可以使用get<n>成员函数来获取,n表示tuple对象中元素的下表。

#include <boost /tuple/tuple.hpp>
boost::tuple<std::string , std::string, int> findPerson() {
    return boost::make_tuple("Joe", "Sixpack", 42);
}
int main(int, char**) {
    boost::tuple< std::string , std::string, int> person = findPerson();
    std::cout < < "Name: " << person.get< 0>() < < " "
        << person.get< 1>() < < std::endl;
    std::cout << "Age: " << person.get< 2>() < < std::endl;
    return 0;
}
 这里我们再介绍一下std::tie,它在拆解tuple对象时更加方便实用(类似于 ES6 destructuring)。它可以很好地替代get来获取元素,下面的代码片段展示了它的使用方法:

int main(int, char**) {
    std::string first_name, last_name;
    int age;
    std::tie(first_name, last_name, age) = findPerson();
    std::cout < < "Name: " << first_name << std::endl;
    return 0;
}

原文链接:https://dzone.com/articles/c-multiple-return-values

原文作者:Ariya Hidayat


猜你喜欢

转载自blog.csdn.net/little_stupid_child/article/details/79231226