模板作用域中的模板类型引用。
template <class elemType> class ListItem;
template <class elemType> class List
{
public:
List<elemType> ();
~List();
private:
//ListItem *front;
//ListItem *end;
ListItem<elemType> *front;
ListItem<elemType> *end;
};
通常使用类模板的名字的时候,必须指定模板形参。
但在类本身的作用域内部,可以使用类模板的非限定名。
例如:List是List<elemType>的缩写。
但编译器不会为类中使用的其他的模板形参进行这样的推断,因此必须指定类型形参。
例如在List模板类中使用ListItem模板类时,
ListItem *front 是错误的
ListItem<elemType> *front 才是正确的。
posted @
2007-01-30 18:04 beyonlin 阅读(596) |
评论 (0) |
编辑 收藏
#include<cstdio>
using namespace std;
template<class T, class T1, class T2>
T sum(T1 v1, T2 v2)
{
T value = v1 + v2;
return value;
}
int main()
{
int i = sum<int>(1,2.1);//调用正确。
return 0;
}
#include<cstdio>
using namespace std;
template<class T1, class T2, class T>
T sum(T1 v1, T2 v2)
{
T value = v1 + v2;
return value;
}
int main()
{
int j = sum<int>(1,2.1);//调用错误。
int k = sum<int, int, double>(1,2.1);//调用正确。
return 0;
}
这两种区别就在于template的定义:
template<class T, class T1, class T2>
与
template<class T1, class T2, class T>
显式模板实参与对应模板形参相匹配。
int j = sum<int>(1,2.1);
在这个调用中,int对应的是T1, 没有实参的类型可以推断T的类型,故该调用是错误的。
posted @
2007-01-22 23:50 beyonlin 阅读(498) |
评论 (0) |
编辑 收藏
工具集成——编译器集成例子(Java、Borland C++、Visual C++、Inno Setup、nsis)
在“工具→参数选择→用户工具”选项页设置,设置步骤
① 设置组名称,这里也可以不设置
② 单击“添加工具→应用程序”按钮并进行如下设置
③ 各种类似"$(FilePath)"的参数可以在文本框右侧的箭头下拉菜单中获取,具体含义如下
参数 描述
$(FilePath) 文件路径(文件全名,含目录和文件名)
$(FileDir) 文件目录(不带文件名)
$(FileName) 文件名(不带目录)
$(FileNameNoExt) 不带扩展名的文件名(不带目录)
$(FileExt) 扩展名(当前文件)
$(ProjectName) 工程名称(当前工程名)
$(CurLine) 当前行号(光标位置处的行号)
$(CurCol) 当前列号(光标位置处的列号)
$(CurSel) 当前文本(插入当前选定文本)
$(CurWord) 当前单词(插入当前单词)
$(WindowList) 显示当前窗口列表并选择特定文件
例子 1. Java 编译器
菜单文本:Java 编译器
命令:c:\java\bin\javac.exe
参数:"$(FilePath)"
初始目录:$(FileDir)
捕获输出:开启
要运行已编译的 Java 类文件,你可以进行如下设置:
菜单文本:Java
命令:c:\java\bin\java.exe
参数:$(FileNameNoExt)
初始目录:$(FileDir)
“命令”部分应当替换为实际的 Java 解释器的路径。
例子 2. Borland C++
菜单文本:Borland C
命令:c:\bc\bin\bcc32.exe
参数:-Ic:\bc\include -Lc:\bc\lib -n$(FileDir) $(FilePath)
初始目录:c:\bc\bin
捕获输出:开启
例子 3. Visual C++
菜单文本:Visual C++
命令:c:\msdev\vc98\bin\cl.exe
参数:"$(FilePath)"
初始目录:$(FileDir)
捕获输出:开启
例子 4. Inno Setup
菜单文本:编译 Inno
命令:C:\Program Files\Inno Setup 4\Compil32.exe”
参数:/cc $(FileName)
初始目录:$(FileDir)
捕获输出:开启
例子 5. nsis
菜单文本:编译 nsis
命令:C:\NSIS\makensis.exe
参数:$(FileName)
初始目录:$(FileDir)
捕获输出:开启
例子 6. C#
菜单文本:编译 C#
命令:C:\WINDOWS\Microsoft.NET\Framework\v1.0.3705\csc.exe
参数:$(FileName)
初始目录:$(FileDir)
捕获输出:开启
在上面设置中,在命令部分,必须使用系统中各自编译器的绝对路径。
设置完毕后,你可以在“工具”菜单运行对应工具了,运行结果会显示在底部的输出窗口,你也可以通过快捷键(Ctrl + 0-9) 运行,或者是通过“用户工具栏”的快捷按钮运行。
要运行已编译的 *.exe 文件,你可以进行如下设置(此时可执行文件需要和编译文件同名):
菜单文本:Run
命令:$(FileNameNoExt)
参数:
初始目录:$(FileDir)
posted @
2006-12-17 01:00 beyonlin 阅读(2700) |
评论 (0) |
编辑 收藏
泛型编程的两个重要原则
模板的形参是const引用。
函数体中的测试只用<比较。
形参用const参数可以使函数运行得更加快。
只用<比较对参数类型的要求:只须支持<,但不必支持>。
posted @
2006-11-20 00:46 beyonlin 阅读(274) |
评论 (0) |
编辑 收藏
这几天为学院的Flash_Dv大赛做了一个投票系统。
为了尽量减少漏洞,我上网查了一下关于投票系统的漏洞问题。
从下面的文章中我才知道验证码的重要性:
http://blog.csdn.net/fiso/archive/2004/11/23/192855.aspx这是关于验证的一点介绍:
目前,不少网站为了防止用户利用机器人自动注册、登录、灌水,都采用了验证码技术。所谓验证码,就是将一串随机产生的数字或符号,生成一幅图片,图片里加上一些干扰象素(防止OCR),由用户肉眼识别其中的验证码信息,输 入表单提交网站验证,验证成功后才能使用某项功能。
PHP代码实现:
<?php
//生成验证码图片
Header("Content-type: image/PNG");
srand((double)microtime()*1000000);
$authnum=rand(1000,9999);
setcookie("authnum",$authnum);//用cookie保存生成四位整数
$im = imagecreate(62,20);
$black = ImageColorAllocate($im, 0,0,0);
$white = ImageColorAllocate($im, 255,255,255);
$gray = ImageColorAllocate($im, 200,200,200);
imagefill($im,0,0,$gray);
//将四位整数验证码绘入图片
imagestring($im, 5, 10, 3, $authnum, $black);
for($i=0;$i<200;$i++) //加入干扰象素
{
$randcolor = ImageColorallocate($im,rand(0,255),rand(0,255),rand(0,255));
imagesetpixel($im, rand()%70 , rand()%30 , $randcolor);
}
ImagePNG($im);
ImageDestroy($im);
?>
posted @
2006-11-06 23:58 beyonlin 阅读(669) |
评论 (0) |
编辑 收藏