代码之家  ›  专栏  ›  技术社区  ›  Ryan

尝试使std::make_pair接受2个以上的参数

c++
  •  0
  • Ryan  · 技术社区  · 6 年前

    我以前在我的RETURN语句中返回了2个项目,但是我必须修改它以便返回3个项目,我对代码做了一些更改,这看起来像是

    std::pair<int, std::pair<std::string, std::string>> get(InputValidator inputValidator){
        std::string imageURL = inputValidator.url();
    
        Requests requests;
        cv::Mat image = requests.downloadImageFromURL(imageURL);
        if(image.empty())
            return std::make_pair(0,empty, "");
    
        try{
            std::vector<std::string> elements;
            cv::Mat croppedFI = rotated_f(image);
            std::string returnFP = rotated_F(image);
            elements.push_back(returnFP);
            std::string uploadUrl = requests.uploadImageToURL(APP.uploadURLSilo, cropped);
            elements.push_back(uploadUrl);
            // return elements[0], elements[1];
            return std::make_pair(0, uploadUrl,returnFP);
    

    但这会引发一个错误,比如

    app.cpp: In member function ‘std::pair<int,std::pair<std::__cxx11::basic_string<char>, std::__cxx11::basic_string<char> > > ResponseFunction::get(InputValidator)’:
    app.cpp:91:46: error: no matching function for call to ‘make_pair(int, std::__cxx11::string&, const char [1])’
                 return std::make_pair(0,empty, "");
    

    跟踪仍在继续,但大多数情况下看起来是相同的错误。

    我的C++不是很好,任何想法都会有帮助。谢谢。

    1 回复  |  直到 6 年前
        1
  •  12
  •   Max Langhof    6 年前

    您可以通过编写

    return std::make_pair(0, std::make_pair(uploadUrl,returnFacePoints));
    

    但是 std::pair 顾名思义,它不是用来装三件东西的。 std::tuple 存在于组合任何数量的事物:

    return std::make_tuple(0, uploadUrl, returnFacePoints);
    

    函数的返回类型

    std::tuple<int, std::string, std::string> get(InputValidator inputValidator){
    

    请注意,这不是C++中的最佳实践。函数的用户不知道第一个返回 std::string 是上传的网址,另一个是关于面点,即使他们知道,也很容易混淆这两个。是的,其他语言也会这样做,但它们的代码基础往往较小。