C++函数一般可以返回一个值,但是在使用中常常需要一个函数返回多个值,因此可以使用结构体 或tuple 来进行实现。
注意看代码里的注释!!!
1.使用结构体返回多个值
实现步骤: 1.先定义一个结构体 2.准备我们要实现的函数(需要返回多个值) 3.在要实现的函数内调用结构体返回多个值 4.使用函数返回结果
代码示例:
struct PointStruct
{
float without_floor;
int only_floor;
};
首先定义一个结构体,我们命名为PointStruct ,你可以随意起想要的名称。假设我们的函数要返回的参数有两个,一个是float 类型的,一个是int 类型的,那么就在PointStruct 这个函数里面进行定义一下。如果想要返回更多的数据,直接写在PointStruct 函数里即可。
PointStruct filterFloorPoint( int max_iterations,float in_floor_max_angle,float Distance_Threshold)
{
int result_iterations;
float result_angle_add_distance;
result_iterations=max_iterations*100;
result_angle_add_distance=in_floor_max_angle*Distance_Threshold;
PointStruct use_PointStruct;
use_PointStruct.without_floor=result_iterations;
use_PointStruct.only_floor=result_angle_add_distance;
return use_PointStruct;
}
这里我们定义了一个函数filterFloorPoint ,想要这个函数返回两个值,一个值为 int 类型的result_iterations ,一个值为float 类型的result_angle_add_distance 。
只需要在函数的最后,对第一步定义好的PointStruct 结构体进行调用。如上面代码所示。
int main()
{
int max_iterations=10;
float in_floor_max_angle=10.0;
float Distance_Threshold=10.0;
int without_floor_cloud_ptr;
float only_floor_cloud_ptr;
PointStruct use_PointStruct_now;
use_PointStruct_now=filterFloorPoint(max_iterations,in_floor_max_angle,Distance_Threshold);
without_floor_cloud_ptr=use_PointStruct_now.without_floor;
only_floor_cloud_ptr=use_PointStruct_now.only_floor;
return 0;
}
2.使用tuple返回多个值
相比于结构体,要实现函数返回多个值的方法,使用tuple更为简洁、灵活。 实现步骤: 定义函数f(x):类型为tuple 函数返回多个值:使用make_tuple(result1,result2,...) 使用函数结果:result=f(x) 取函数返回值:result1=get<0>(result); result2=get<1>(result);
代码示例:
tuple<int, float> filterFloorPoint( int max_iterations,float in_floor_max_angle,float Distance_Threshold)
{
int result_iterations;
float result_angle_add_distance;
result_iterations=max_iterations*100;
result_angle_add_distance=in_floor_max_angle*Distance_Threshold;
return make_tuple(result_iterations,result_angle_add_distance);
}
这里我们定义了一个返回值类型为tuple 的函数filterFloorPoint ,其实现内容和普通函数无异,只是在函数的返回值处使用了make_tuple() 方法将要返回的数据写在里面。那么我们如何对结果进行取值使用呢?
int main()
{
int max_iterations=10;
float in_floor_max_angle=10.0;
float Distance_Threshold=10.0;
tuple<int, float> get_filterFloorPoint_result;
get_filterFloorPoint_result=filterFloorPoint(max_iterations,in_floor_max_angle,Distance_Threshold);
without_floor_cloud_ptr=get<0>(get_filterFloorPoint_result);
only_floor_cloud_ptr=get<1>(get_filterFloorPoint_result);
return 0;
}
这里我们使用了get<i> 方法对函数返回结果进行取值,i 为我们的返回值序号。
综上所述,个人觉得使用tuple 方法更为便捷,因为不需要定义结构体,且在函数内只需要对返回值类型进行修改、对返回值使用make_tuple() 方法进行包装,在调用的时候根据索引来调用更好理解。但需要注意返回参数的顺序不要混淆。
|