试图使std :: make_pair接受两个以上的参数

时间:2019-01-11 09:31:53

标签: c++

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

declare @SALE_DETAIL table([ORDER_NUMBER] [varchar](50) NULL,
    [ITEM_NAME] [varchar](250) NULL,
    [QUANTITY] [int] NULL,[PRICE] [numeric](18, 0) NULL,[Status] [varchar](50) NULL)
INSERT @SALE_DETAIL ([ORDER_NUMBER], [ITEM_NAME], [QUANTITY], [PRICE], [Status]) VALUES
(N'SO-100-ORD-19', N'Double Bed', 5, CAST(70000 AS Numeric(18, 0)), N'A'),
(N'SO-100-ORD-19', N'Sofa', 5, CAST(10000 AS Numeric(18, 0)), N'A'),
(N'SO-100-ORD-19', N'Dining Table', 1, CAST(50000 AS Numeric(18, 0)), N'A'),
(N'SO-100-ORD-19', N'Sofa', 5, CAST(10000 AS Numeric(18, 0)), N'D')

select Order_number,Item_name,Quantity,Price
from @SALE_DETAIL
where Status = 'A'
except
select Order_number,Item_name,Quantity,Price
from @SALE_DETAIL
where Status = 'D'

但这会引发类似错误

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);

回溯继续,但大多数情况下看起来都是相同的错误。

我的c ++并不是很好,任何想法都将真正有用。谢谢。

1 个答案:

答案 0 :(得分:12)

您可以通过编写错误来解决

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是上传URL,而另一个是关于面部点的-即使他们知道,也很容易混淆两者。是的,其他语言也可以这样做,但是它们的代码库往往较小。