使用Smarty,如何在模板中使用自己的函数 - PHP进阶讨论

使用Smarty,如何在模板中使用自己的函数 - PHP进阶讨论,第1张

$smarty->register_function(\'pic_list\', \"pic_list\");具体看手册有关register_function用法另外还有方法就是写好便准命名和格式的函数,放到smarty定义的扩展目录

可知函数的作用是将数的各位提取,按ascii值由高位到低位逐位放在一段内存中;当char_type为char时,返回这段内存的首地址;当char_type为string时,该字符串类的begin()返回该空间首

用string

string p;int n;

cin >>n;

p=number_to_string<string,int>(n);

用char

char p;int n;

cin >>n;

p=number_to_string(char,int)(n);

函数模板参数类型写齐不会错的

给你一个例子吧:

#include <iostreamh>

template <class SomeType>

void Swap (SomeType &a, SomeType &b)

{

SomeType tmp;

tmp = a;

a = b;

b = tmp;

}

template <class SomeType>

void Min(SomeType array[], long size, long start, long &currentPosition)

{

if( currentPosition - start + 1 < size &&

array[currentPosition] > array[currentPosition + 1]

)

currentPosition = currentPosition + 1;

}

template <class SomeType>

void FilterDown(SomeType array[], long start, long size, long position)

{

long realPosition, relativePosition, offset;

relativePosition = position - start + 1;

offset = 2relativePosition - 1;

realPosition = start + offset;

while(offset + 1 <= size)

{

Min(array, size, start,realPosition);

if(array[position] > array[realPosition])

Swap(array[realPosition], array[position]);

position = realPosition;

relativePosition = position - start + 1;

offset = 2relativePosition - 1;

realPosition = start + offset;

}

}

template <class SomeType>

void BuildHeap(SomeType array[], long start, long size)

{

long filterDown;

for(filterDown = size/2 - 1; filterDown >= 0; filterDown --)

FilterDown(array, start, size, start + filterDown);

}

template <class SomeType>

void HeapSort(SomeType array[], long start, long size)

{

BuildHeap(array, start, size);

long numToBeSorted;

for(numToBeSorted = size - 1; numToBeSorted > 0; numToBeSorted --)

{

Swap(array[start], array[start + numToBeSorted]);

FilterDown(array, start, numToBeSorted, start);

}

}

int main()

{

int number;

int a[100], i;

cin >> number;

for(i = 0 ; i < number; i ++)

cin >> a[i];

HeapSort(a, 1, number - 1);

for(i = 0; i < number; i ++)

cout << a[i] << " ";

cout << endl;

return 0;

}

模板写的堆排序。

答案:D

在调用一个模板函数时,编译系统需要足够的信息来判别每个虚拟类型参数所对应的实际类型,可以从两个不同的渠道获得这样的信息:从模板实参表(用“<>”括起来的参数表)或从模板函数实参表(用“()”括起来的参数表)。如果从后者获得的信息已经能够判定其中部分或全部虚拟类型参数所对应的实际参数,而且它们又正好是参数表中最后的若干参数,则模板实参表中的那几个参数可以省略。如果模板实参表中的实参都被省略了,则空表“<>”也可以不要,因此选项D错误。反之,对于某个模板实参,如果从模板函数的实参表中无法获得同样的信息,就不能省略;或者虽然能够获得同样的信息,但在它后面还有其他不能省略的实参,则其自身还是不能省略。

#include <iostream>

using namespace std;

template<typename T> //模板声明,其中T为类型参数

T max(T a,T b,T c)

//定义一个通用函数,用T作虚拟的类型名

{if(b>a) a=b;

if(c>a) a=c;

return a;

}

int main( )

{

int i1=185,i2=-76,i3=567,i;

double d1=5687,d2=9023,d3=-321478,d;

long g1=67854,g2=-912456,g3=673456,g;

i=max(i1,i2,i3); //调用模板函数,此时T被int取代

d=max(d1,d2,d3); //调用模板函数,此时T被double取代

g=max(g1,g2,g3); //调用模板函数,此时T被long取代

cout<<"i_max="<<i<<endl;

cout<<"d_max="<<d<<endl;

cout<<"g_max="<<g<<endl;

return 0;

}

你们看看就知道有什么作用了!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/12177874.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存