C++ 函数返回多个值

   日期:2020-05-31     浏览:111    评论:0    
核心提示:参考知乎某大佬#include #include #include #include #include #include #include // C++ return multiple value// 1.returned value,reference parameterbooc/c++

参考知乎某大佬

#include <optional>
#include <string>
#include <iostream>
#include <variant>
#include <type_traits>
#include <tuple>
#include <any>

// C++ return multiple value

// 1.returned value,reference parameter
bool func(const std::string& in,std::string& out1,std::string& out2){
    if(in.size() == 0) return false;
    out1 = "hello";
    out2 = "world";
    return true;
}
// 2.tuple
std::tuple<bool,std::string,std::string> func(const std::string& in){
    if(in.size() == 0)
        return std::make_tuple(false,"","");
    return std::make_tuple(true,"hello0","world0");
}
// 3.pair
namespace pair{
    struct Out{
        std::string out1{};
        std::string out2{};
    };
}
std::pair<bool,pair::Out> func1(const std::string& in){
    pair::Out o;
    if(in.size() == 0){return {false,o};}
    o.out1 = "hello1";
    o.out2 = "world1";
    return {true,o};
}
// 4.optional
std::optional<pair::Out> func2(const std::string& in){
    pair::Out o;
    if(in.size() == 0) return std::nullopt;
    o.out1 = "hello2";
    o.out2 = "world2";
    return {o};
}
// 5.variant
std::variant<bool,pair::Out> func3(const std::string& in){
    std::variant<bool,pair::Out> re;
    if(in.size() == 0){
    	re = bool{};
   	}else{
        pair::Out o;
        o.out1 = "hello3";
        o.out2 = "world3";
        re = o;
    }
    return {re};
}
// 6. any
std::any func4(const std::string& in){
    if(in.size() == 0) return bool{};
    pair::Out o;
    o.out1 = "hello4";
    o.out2 = "world4";
    return {o};
}
int main(){
    std::string s1,s2;
    int status = func("hi",s1,s2);
    if(status){
        std::cout <<s1<< std::endl;
        std::cout <<s2<< std::endl;
    }
    //tuple返回,结构化绑定 c++17
    if(auto [status,out1,out2] = func("hi");status){
        std::cout <<out1<< std::endl;
        std::cout <<out2<< std::endl;
    }
    //pair返回,结构化绑定
    if(auto [status,o] = func1("hi");status){
        std::cout << o.out1 << std::endl;
        std::cout << o.out2 << std::endl;
    }
    //optional 返回
    if(auto ret = func2("hi");ret.has_value()){
        std::cout <<ret->out1<< std::endl;
        std::cout <<ret->out2<< std::endl;
    }
    //variant
    if(auto ret = func3("hi");!std::get_if<bool>(&ret)){
        std::cout <<std::get<pair::Out>(ret).out1 << std::endl;
        std::cout <<std::get<pair::Out>(ret).out2 << std::endl;
    }
    //any
    if(auto ret = func4("hi");ret.type() != typeid(bool)){
        auto o = std::any_cast<pair::Out>(ret);
        std::cout << o.out1 << std::endl;
        std::cout << o.out2 << std::endl;
    }
}

此篇主要涉及到 C++17,如有疑问请留言或者参考官网文档。

 
标签: 文章标签: c++
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
更多>相关资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服