C++11环境下如何替换支持多类型参数调用的函数中的auto形参
适配C++11的修改方案
C11不支持函数参数直接使用auto声明,该语法是C14才引入的「简写函数模板」特性。要实现支持多类型参数的需求,改用显式函数模板即可,和原代码的功能完全一致,修改后的代码如下:
// 声明模板参数T,可匹配任意类型的数组和对应类型的查找元素 template<typename T> int get_index(T s_arr[], T elem) { // 原有函数逻辑不需要修改 ... } int main() { // 调用时先定义数组和变量实例,再传入函数 float array1[10] = {/* 自定义数组内容 */}; float var1 = 1.5f; get_index(array1, var1); int array2[10] = {/* 自定义数组内容 */}; int var2 = 3; get_index(array2, var2); return 0; }
补充说明
- 上述模板写法在编译时会根据传入的参数类型自动生成对应版本的函数,和你原用
auto实现的效果完全相同,完美适配C++11标准。 - 原代码里的
void main属于部分编译器支持的非标准写法,C++标准要求main函数返回值为int,已同步修正。 - OMNeT中可在项目属性的C编译选项里确认已开启
-std=c++11,避免后续出现标准不兼容报错。
内容的提问来源于stack exchange,提问作者Ab Danyia
相关产品推荐
相关产品推荐

