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

时间:2018-08-13 18:43:39

标签: c++ dictionary 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。

我该怎么办?

(对不起,我的英语很糟糕。)

3 个答案:

答案 0 :(得分:2)

作为替代方案,您可以在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;
}

答案 1 :(得分:0)

如果函数返回map,则必须返回map-您不能返回nullptr(肯定是空的map,但是那将尽你所能)。也许您正在寻找std::optional,以便可以让函数返回一个可能存在或可能不存在的可选映射?

答案 2 :(得分:0)

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

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

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

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

来自@nsanders的原始答案

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