当前位置:
文档之家› 模板函数及函数指针2014.4.29
模板函数及函数指针2014.4.29
//函数指针数组:double 型模板函数 double (*dPtrFun[])(double,double) = { Add,
Sub, Multi, Divide, }; //调用 Divide(double,double) double dResult = (*dPtrFun[3])(2.07,5.00); std::cout<<dResult<<std::endl;
return static_cast<_T>(number1+number2); }
template<class _T> _T Sub(_T number1,_T number2) {
return static_cast<_T>(number1-number2); }
template<class _T> _T Multi(_T number1,_T number2) {
/* 常规函数指针实现及声明 */ /*float AddFun(float number1,float number2) {
return number1+number2; }
float SubFun(float number1,float number2) {
return number1+number2; } float MultiFun(float number1,float number2) {
return static_cast<_T>(number1*number2); }
template<class _T> _T Divide(_T number1,_T number2) {
if (number2==0) {
return static_cast<_T>(0); } return static_cast<_T>(number1/number2); }
return 0; }
上述代码在 VC2008 上编译通过
return number1+number2; } float DivideFun(float number1,float number2) {
return number1+number2; }
//格式:函数类型 (*指针变量名)(形参列表); //"函数类型"说明函数的返回类型,由于“()”的优先级高于“*”, //所以指针变量名外的括号必不可少,后面的“形参列表”表示指针变量指向的函数所带的 参数列表。
//函数指针数组:int 型模板函数 int (*iPtrFun[])(int,int) = { Add,
Sub, Multi, Divide, }; //调用 Multi(int,int) int iResult = (*iPtrFun[2])(2,5); std::cout<<iResult<<std::endl;
模板函数及函数指针(数组)
/* 模板函数:减少不同类型之间,函数实现功能的代码量; 函数指针数组:统一调用执行函数的代码格式。要求具有相同的接口类型。 */ #include "stdafx.h" #include <iostream>
/* 模板函数,必须使用 class,不能用 typedef。 */ template<class _T> _T Add(_T number1,_T number2) {
float (*FunPtr)(float,flAR* argv[]) {
//函数指针数组:float 型模板函数 float (*fPtrFun[])(float,float) = { Add,
Sub, Multi, Divide, }; //调用 Add(float,float) float fResult = (*fPtrFun[0])(2.01f,5.05f); std::cout<<fResult<<std::endl;