是否可以通过函数返回多个类型?

时间:2017-09-19 04:13:14

标签: c++11

我想知道是否有可能返回一个可以返回布尔值或无效的函数?我知道我可以使用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
} 

3 个答案:

答案 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
};