我想从返回类型为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。
我该怎么办?
(对不起,我的英语很糟糕。)
答案 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... }