繁体   English   中英

如何让函数有不同的返回类型? C ++

[英]How to have a function have different return type? C++

我正在完成一项任务,我的教授将这项任务作为任务的一部分给了我们。 我还是比较新的C ++,所以任何帮助。 我创建了该函数但是我不明白如果找不到任何内容他想如何返回空字符串但是如果找到它则返回一个整数。 没有重载功能,这有可能吗? 现在我只是将函数设置为整​​数类型而不是返回空字符串而是返回0。

这是作业的一部分。 如果你能解释一下你的解决方案,那么像我这样的愚蠢的人就能理解它,我将非常感激。

FindWord - 此成员函数将字符串作为参数并在列表中搜索它。 如果列表为空或无法找到,则返回空字符串值(“”)。 否则,它返回索引的int值(例如,数组元素号,例如0,1,2等)。 请记住,==相等比较运算符适用于作为字符串对象(而不是char数据元素)处理的字符串,并且您不需要区分大小写。

编辑:这是我到目前为止的代码

int WordList::FindWord(string word){

if ((listSize = 0)){ // return -1 if no list exists;
    return -1;
}
else {
    for (int i =0;i<listSize;i++){ // run loop to check for word/        
        if (word == list[i]) // if word is found then return index
            return i;
     }        
        return -1; // return -1 if word is not found
   }
}

这可以通过C ++ 17特性std::variantstd::get_if

  • 搜索函数将返回std::variant<int, std::string>
  • main使用std::get_if来确定返回了哪些值。

std::get_if返回指向存储在指向变量中的值的指针或出错时的空指针。

#include <variant>
#include <string>
#include <iostream>
#include <list>

 std::variant<int, std::string> strSearch(const std::string& searchStr, const std::list<std::string>& searchList)
 {
     int i = 0;
     for(const auto& s: searchList) {               
        if(!s.find(searchStr))
            return i;
        i++;    
     }
     return "";     
 }

int main()
{
    std::list<std::string> strList = {"stack", "stackover", "stackoverflow"};
    std::string str = "stackoverflow";
    std::variant<int, std::string> v{strSearch(str, strList)};
    if(std::get_if<int>(&v))
        std::cout << "String found. Index in the List is:" << std::get<int>(v) << '\n';
    else    
        std::cout << "String not found"  << '\n';

    str = "stackunderflow";
    v = strSearch(str, strList);
    if(std::get_if<int>(&v))
        std::cout << "String found. Index in the List is:" << std::get<int>(v)  << '\n';
    else    
        std::cout << "String not found."  << '\n';    

}

在这里看到它。

您需要返回两个对象,而不能通过重载函数来执行此操作。

所以你可以使用:

std::pair<int, std::string> search(const std::string&, const std::list<std::string>& l);

或者您可以通过传递对它的引用来返回第二个对象:

std::string search(const std::string&, const std::list<std::string>& l, it& index);

C ++ 17中的另一个选择是正确的方法:

std::optional<size_t> search(const std::string&, const std::list<std::string>& l);

如果搜索成功,您将获得一个整数,否则您将得不到值。 返回一个空字符串只是...

这在C ++中是不可能的,只能为函数定义一种返回类型。

这里有两种可能的情况:

1返回包含整数和字符串并使用已设置的结构的结构

例如

struct returnData{
int returnCode;
std::string returnText;
}

returnData myFunc(std::string){}

2可能会将您的搜索字符串用作输入/输出参数,但这比分配更有意义所以我不会进入它。

还有可能返回void *(一个通用的数据),然后将它转换为字符串或int,但是没有办法知道它应该是什么。

我真的不知道你的教授究竟对这个任务的期望是什么,因为根据参数返回一个不同的值几乎是不可能的,除非你将它们都返回并忽略它们。

我看到一个答案表明要返回的结构。 如何使用整数和字符串值进行联合并将其作为返回类型

你可以返回void *,它会返回你想要的一切

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM