当前位置:首页 » 编程语言 » c语言创建自己的模板
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言创建自己的模板

发布时间: 2022-07-29 07:44:20

‘壹’ c语言设计一个函数模板,题目见图。2选一。要程序谢谢

#include <iostream>
using namespace std;
template<typename T>
T Mam(T *_itBegin, T *_itEnd)
{
T *_val = _itBegin;
for (T *_it = _itBegin; _it!=_itEnd; ++_it)
if(*_it > *_val)
_val = _it;
return (*_val);
}int main()
{
char pArray[] = "oasndflwerasdf";
cout<<Mam(pArray, pArray+sizeof(pArray)/sizeof(char))<<endl;
int pArray1[] = {7,8,9,1,3,4,7,65,58};
cout<<Mam(pArray1, pArray1+sizeof(pArray1)/sizeof(int))<<endl;
return 0;
}

‘贰’ 有用c语言编写程序的模板吗

有!先包含库文件->变量,函数声明,->main函数->结束!就这么简单!

‘叁’ C中的模板怎样使用 最好给个例子~

看看这个吧
http://www.njcc.e.cn/njhysite/njhygao_js/xuebao/xuebao0402/zhjm.doc
其他的见

C语言中实现模板函数的方法

在C语言中实现模板函数的方法:

各种用C语言实现的模板可能在使用形式上有所不同。

现以一个求和函数Sum为例,用C++Template可写如下:

template<classT,classR> RSum(constT*array,intn)

{

Rsum=0;

for(inti=0;i<n;++i)

sum+=i;

returnsum;

}

如果不是内置类型,该模板隐式地需要有RR::operator+=(T)运算符可用。

1. 使用函数指针作为Functor替换者
TypedefstructtagAddClass

{

Void(*add)(char*r1,constchar*r2);

IntelemSize;

Char sum[MAX_ELEM_SIZE];

}AddClass;

voidSum(AddClass*self,constchar*array,intn)

{

for(inti=0;i<n;++i)

self->add(self->sum,array+i*self->elemSize);

}

使用时:

…..

VoidAddInt(char*r1,constchar*r2)

{

*(long*)r1+=*(int*)r2;

}

AddClassaddClass={AddInt,2,0};

Intarray[100];

Read(array);

Sum(&addClass,array,100);

…..

2. 用宏作为Functor的替换者
#define GenSumFun(SumFunName,Add,RetType,ElemType) \

RetTypeSumFunName(constElemType*array,intn) \

{ \

RetTypesum=0; \

for(inti=0;i<n;++i) \

Add(sum,i); \

returnsum; \

}

使用时:

#defineAddInt(x,y) ((x)+=(y))

GenSumFun(SumInt,AddInt,long,int)

…..

Intarray[100];

Read(array);

Longsum=SumInt(array,100);

…..

3. 所有可替换参数均为宏
至少需要一个额外的文件(实现文件)为impsum.c

/*impsum.c*/

RetTypeFunName(constElemType*array,intn)

{

RetTypesum=0;

for(inti=0;i<n;++i)

Add(sum,i);

returnsum;

}

使用时:

#undef RetType

#undef FunName

#undef ElemType

#undef Add

#defineAddInt(x,y) ((x)+=(y))

#defineRetTypelong

#defineFunNameSumInt

#defineElemTypeint

#defineAdd AddInt

#includeimpsum.c

…..

Intarray[100];

Read(array);

Longsum=SumInt(array,100);

…..

4. 总结:
第一种方法,易于跟踪调试,但是效率低下,适用于对可变函数(函数指针)的效率要求不高,但程序出错的可能性较大(复杂),模板函数(Sum)本身很复杂,模板参数也比较复杂(add)的场合。

第二种方法,效率高,但很难跟踪调试,在模板函数和模板参数本身都很复杂的时候更是如此。

第三种方法,是我最近几天才想出的,我认为是最好的,在模板参数(Add)比较复杂时可以用函数(第二种也可以如此),简单时可以用宏,并且,易于调试。在模板函数本身很复杂,而模板参数比较简单时更为优越。但是,可能有点繁琐。

一般情况下,没有必要做如此劳心的工作,一切交给编译器去做就行了。但是本人在开发一个文件系统时,由于是基于一种少见的平台,没有可用的C++编译器,有几个函数,除了其中的类型不同(uint16和uint32),和几个可参数化的宏不同,其它地方完全相同,而函数本身很复杂(两百多行代码)。Copy出几个完全类似的函数副本,维护起来特别烦人。非常需要如此的编程模式,故此,分享出来,大家共同探讨。

‘肆’ C中实现模板

模版的功能,不能用C语言实现的!

这种功能,需要编译器的支持。

如果你不是想重载的话,倒是可以实现的。
你最好把问题再简化一下,我觉得我还不太理解你的意思。

‘伍’ c语言如何实现字符串模板功能,比如输入字符串httpd_access_%HOSNAME%.log,输出httpd_access_rango.log。

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedefstruct__TEMPLATE__{
charKEY_NAME[256];
charVALUE[256];
}TEMPLATE;

voidLoadTemplate(char*src,TEMPLATEtp[],intcbtp){
char*p=src;
char*t=NULL;
charbak[256]={0},*pb=bak;
inti;
while(*p){
if(*p=='%'){
if(t){
for(i=0;i<cbtp;i++){
if(strncmp(tp[i].KEY_NAME,t,p-t)==0){
strcat(pb,tp[i].VALUE);
pb+=strlen(tp[i].VALUE);
break;
}
}
t=NULL;
}elset=p+1;
}elseif(!t)*pb++=*p;
p++;
}
memmove(src,bak,256);
}

intmain()
{
TEMPLATEtp[3]={{"HOSTNAME","localhost"},{"USER","test"},{"DATE","20140725"}};
charstr[256]="httpd_access_%HOSTNAME%_%DATE%_%USER%.log";
LoadTemplate(str,tp,3);
printf("%s ",str);
return0;
}

‘陆’ 如何用visual studio 6.0 新建c语言模板

楼上显然没有用过VC++6.0

文件->新建->文件->C++ Source File
输入源代码,编译。。。

‘柒’ c语言,什么是占位符

什么是占位符?
顾名思义,占位符就是先占住一个固定的位置,等着你再往里面添加内容的。它在幻灯片上表现为一个虚框,虚框内部往往有“单击此处添加标题”之类的提示语,一旦鼠标点击之后,提示语会自动消失。当我们要创建自己的模板时,占位符就显得非常重要,它能起到规划幻灯片结构的作用。

‘捌’ 在c语言中如何实现函数模板

各种用
C
语言实现的模板可能在使用形式上有所不同。现以一个求和函数
Sum
为例,用
C++
Template
可写如下:
template
R
Sum(const
T
*array,
int
n)
{
R
sum
=
0;
for
(int
i
=
0
;
i
<
n
;
++i)
sum
+=
i;
return
sum;
}
如果不是内置类型,该模板隐式地需要
有R
R::operator+=(T)运算符可用。
1.
使用函数指针作为
Functor
替换者
Typedef
struct
tagAddClass
{
Void
(*add)(char*
r1,
const
char*
r2);
Int
elemSize;
Char
sum[MAX_ELEM_SIZE];
}
AddClass;
void
Sum(AddClass*
self,
const
char*
array,
int
n)
{
for
(int
i
=
0
;
i
<
n
;
++i)
self->add(self->sum,
array
+
i*self->elemSize);
}
使用时:
Void
AddInt(char*
r1,
const
char*
r2)
{
*(long*)r1
+=
*(int*)r2;
}
AddClass
addClass
=
{AddInt,
2,
0
};
Int
array[100];
Read(array);
Sum(&addClass,
array,
100);
…..
2.
用宏作为Functor的替换者
#define
GenSumFun(SumFunName,
Add,
RetType,
ElemType)
RetType
SumFunName
(const
ElemType
*array,
int
n)
\
{
RetType
sum
=
0;
for
(int
i
=
0
;
i
<
n
;
++i)
Add(sum,
i);
return
sum;
}
使用时:
#define
AddInt(x,
y)
((x)
+=
(y))
GenSumFun(SumInt,
AddInt,
long,
int)
…..
Int
array[100];
Read(array);
Long
sum
=
SumInt(array,
100);
…..
3.
所有可替换参数均为宏
至少需要一个额外的文件(实现文件)为
impsum.c
/*
impsum.c
*/
RetType
FunName(const
ElemType
*array,
int
n)
{
RetType
sum
=
0;
for
(int
i
=
0
;
i
<
n
;
++i)
Add(sum,
i);
return
sum;
}
使用时:
#undef
RetType
#undef
FunName
#undef
ElemType
#undef
Add
#define
AddInt(x,
y)
((x)
+=
(y))
#define
RetType
long
#define
FunName
SumInt
#define
ElemType
int
#define
Add
AddInt
#include
impsum.c
…..
Int
array[100];
Read(array);
Long
sum
=
SumInt(array,
100);
4.
总结:
第一种方法,易于跟踪调试,但是效率低下,适用于对可变函数(函数指针)的效率要求不高,但程序出错的可能性较大(复杂),模板函数(Sum)本身很复杂,模板参数也比较复杂(add)的场合。
第二种方法,效率高,但很难跟踪调试,在模板函数和模板参数本身都很复杂的时候更是如此。
第三种方法,是我最近几天才想出的,我认为是最好的,在模板参数(Add)比较复杂时可以用函数(第二种也可以如此),简单时可以用宏,并且,易于调试。在模板函数本身很复杂,而模板参数比较简单时更为优越。但是,可能有点繁琐。

‘玖’ 怎么在vs2010中创建自己的模板,c语言文件

这才几个字,打的很快的。实在不行复制粘贴即可

‘拾’ c语言菜单模板

#include
#include
void function1(){
}
void function2(){
}
void function3(){
}
int main(int argc, char *argv[]){//主函数
char choice; //暂存选择
while(true){
printf("-----------------主题-----------21/11/14 18:38\n\n");
printf("1:功能1\n2:功能2\n3:功能3\n4:退出\n请选择操作:");
scanf("%c",&choice);
switch(choice){
case '1' : function1();break;
case '2' : function2();break;
case '3' : function3();break;
case '4' : return 0;break;
}
system("cls");
}
}