我想知道是否有可能返回一个可以返回布尔值或无效的函数?我知道我可以使用std::optional
但是只能在C ++ 17中使用,而我的代码库是C ++ 11。我想要这样的东西
xxx process(int a)
{
if (a==1)
return true;
if (a==2)
return false;
if (a==3)
.... //return nothing
}
答案 0 :(得分:2)
为了返回两个值,我使用std :: pair(通常是typedef'd)。 在C ++ 11及更高版本中,您应该使用std::tuple来获得两个以上的返回结果。
使用元组的抽象示例
std::tuple<bool, int> process(int a)
{
if (a==1)
return std::make_tuple(true, 0);
if (a==2)
return std::make_tuple(false, 0);
if (a==3)
return std::make_tuple(false, 1);
}
答案 1 :(得分:1)
变体可能是更好的匹配:
根据您的要求:一个可以返回布尔值或空格
的函数见:http://en.cppreference.com/w/cpp/utility/variant
类模板std :: variant表示类型安全联合。一个 在任何给定时间std :: variant的实例要么保持值为1 它的替代类型,或它没有价值(这种状态很难 实现,参见valueless_by_exception)。
答案 2 :(得分:0)
如果您不想编写等效的std :: optional,请使用枚举。
enum class Result
{
False,
True,
Nothing // or whatever name makes sense in your use case
};