繁体   English   中英

如何从Visual C ++中返回类型为map的函数返回null?

[英]How to return null from a function whose return type is map in Visual C++?

我想从返回类型为map的函数中返回空数据。

这是我的代码。

map<string, string> something_to_do(string something) { 
    // something to do..
    // if above code is something wrong, it should return null.
    return null;
}

但是,似乎没有类型转换可以在地图库中返回null。

我该怎么做?

(对不起我的英语不好。。。)

作为替代方案,您可以在C ++ 17中使用std::optional

std::optional<std::map<string,string>> something_to_do(string something) {
  std::map<std::string,std::string> yourmap;
  yourmap["a"] = "b";
  ...
  return yourmap;

  // or 
  // return std::null_t;
}

...

auto d = something_to_do(something);
if (d)
{
  auto& m = d.value();
  std::cout << m["a"] << std::endl;
}

如果该函数返回一个map ,则必须返回一个map -您不能返回nullptr (当然,这是一个空map ,但这与您将得到的接近)。 也许您正在寻找std::optional以便您可以让函数返回一个可能存在或可能不存在的可选映射?

我认为抛出异常可以更好地处理您正在寻找的功能。

这样,您可以照常进行,但是如果出现问题(如您在注释中提到的那样),则您想抛出一个异常并让任何客户端代码相应地处理该异常。 请参阅此SO帖子

它使您可以编写简单明了的代码,而无需为运行代码的每种可能情况返回自定义类型。 它还消除了仅为了处理任何错误而检查返回的某些值的需要。

要调用该函数并处理错误,您只需将方法调用包装在try-catch块中:

来自@nsanders的原始答案

 try { compare( -1, 3 ); } catch( const std::invalid_argument& e ) { // do stuff with exception... } 

暂无
暂无

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

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