C++模板参数为数组
来源:互联网 发布:2017年户外广告数据 编辑:程序博客网 时间:2024/05/23 17:54
本想写个模板函数,然后导成DLL,然后可以到处引用。可是后来发现,我的想法很天真。
由于C++是强类型语言,所以模板在用的时候必须确定其类型。而C++的模板只是一种语法糖,只不过是编译器在后台在做字符串替换罢了。
而dll导出的内容一定要是实实在在的,而模板必需要实例化成具体的东西,才能导出。
所以只能是在dll内部再写个类,把此类导出来,然后让此类内部去调用模板来实现。
在此写了两个参数为数组的模板,模板的功能也很简单,就查找数组中值的下标。
/** * @brief 简单数组类型中检索相应值的位置,size直接可以由模板自己导出。 常用的简单数组类型比如:int[],double[]等 * @param[in] T 数组 * @param[in] size 数组大小 * @return int 值在数组的中的下标 */template <typename T,int size>int GetIndex(T (&vec)[size],T cmp){for (int i = 0; i <= size ;i++){if (vec[i] == cmp){return i;}}return -1;};
调用可以由以下:
int arr[10]={1,2,3,4,5,6,7,8,9,10};for(int i=0;i<10;i++){warr.Add(i);}//int b = FindIndx<int,sizeof(arr)/ sizeof(int)>(arr,9);int b = GetIndex(arr,9);
对于复杂的数组类型,如MFC中的CStringArray等则可以有以下的用法。
/** * @brief 复杂数组类型中检索相应值的位置,size由数组的GetSize()方法得到。 常用的复杂数组类型比如:CDWordArray,CWordArray,CStringArray等 * @param[in] T 数组 * @param[in] size 数组大小* @param[in] U 被检索的值 * @return int 值在数组的中的下标 */template <typename T,typename U>int GetCArrayIndex(T& vec,U cmp){for (int i = vec.GetSize()-1; i >=0 ;i--){if (vec[i] == cmp){return i;}}return -1;};
调用如下:
CStringArray sarr;char szval[5];for(int i=0;i<10;i++){itoa(i,szval,10);sarr.Add(szval);}int c = GetCArrayIndex(sarr,"8");
对于复杂参数的模板,一定要记住对应的类型的方法。如CArray才有GetSize(),方法,而简单数组,没有GetSize()方法,所以在实现的时候要记住模板说对应的类型和方法。
当然,此两个函数中的返回值都是int,其实返回值类型也可以自己指定。只要在模板的定义的时候
template<typename T,typename U,typename R>中,R可以做为返回值的类型。
那么此方法就可以写成:
template<typename T,typename U,typename R>
R GetCArrayIndex(T& vec,U cmp)
{............}
理解的不够深入还请多指导。
- C++模板参数为数组
- C语言数组名作为函数参数
- C语言 函数参数为数组
- C语言:数组名作为函数参数
- C中的数组作函数参数被译为指针
- c 数组做为形参时 该参数退化为指针
- 黑马程序员-C语言-数组名作为函数参数
- C语言中数组名作为参数进行函数传递
- 数组名作为函数参数例子(C语言)
- url参数为数组
- SpringMvc-参数为数组
- C语言中,数组名作为参数传递给函数时,退化为指针
- C语言中,数组名作为参数传递给函数时,退化为指针
- C语言中,数组名作为参数传递给函数时,退化为指针
- C语言中用数组名作为参数能改变实参数组的值的理解
- C语言 数组名作为参数传递 数组名发生退化成指针
- C#-数组参数
- C++ 模板类型参数
- Ajax工作原理
- Android Irrlicht Compling Error: Argument list too longPosted
- 内核调试技术
- Linux Socket编程(不限Linux)
- 整理一系列优秀的Android开发源码
- C++模板参数为数组
- Super Pig 游戏大纲设定公开
- jsp课程(1)--初识jsp
- jsp网络编程基本常识
- js控制文本框输入的字符数
- 寻找数组中第k小元素
- Oracle数据库日志存放位置
- 杂记之C语言之关键字volatile和static
- Outlook 打开, 关闭变慢(Outlook 2007 so slow and not just me..check this out!)