内联模板 – C++快速入门46
内联模板
让编程改变世界
Change the world by program
内联函数
内联即inline,可能很多鱼油虽然听过这个词儿但却不是太熟悉,因为平时用之甚少?!
我们第一想到的是内联函数,引入内联函数的目的是为了解决程序中函数调用的效率问题。
内联函数从源代码层看,有函数的结构,而在编译后,却不具备函数的性质。编译时,类似宏替换,使用函数体替换调用处的函数名。
一般在代码中用inline修饰,但能否形成内联函数,需要看编译器对该函数定义的具体处理。
举个栗子:
inline int add (int x, int y, int z)
{
return x+y+z;
}
在程序中,调用其函数时,该函数在编译时被替代,而不像一般函数那样是在运行时被调用。
内联模板
可以看到,类模板和函数模板的创建过程几乎没有什么区别。
“把相关代码放在一起”这条重要规则同样适用于类模板。
不管是什么模板,编译器都必须看到全部的代码才能为一种给定的类型创建出一个新的实现来。
在创建类模板时,避免类声明和类定义相分离的一个好办法是使用内联方法。
在类里,内联方法的基本含义是在声明该方法的同时还对它进行定义。
class Person
{
Person(std::string name)
{
this -> name = name;
}
// … …
}
除了可以更好地帮助编译器处理类模板之外,使用内联方法还有一个很好的作用:可以让你少打些字并让源代码的可读性变得更好。
好了,让我们一起来改善上节课的栈程序(源代码下载)
注意
如果你打算在自己的程序里使用Stack模板,一定要给它增加一个副本构造器和一个赋值操作符重载,就像我们之前做过的例子一样!
我们刚刚的代码还缺少必要的错误处理功能,例如在栈已满的时候调用push()方法,或者在栈为空的时候调用pop()方法,会导致程序运行出错。
我们应该设法让栈在遇到这两种情况的时候抛出一个异常来处理。
C++并没有限制只能使用一个类型占位符,如果类模板需要一种以上的类型,根据具体情况多使用几个占位符即可。
template
class MyClass
{
// … …
}
在实例化时,我们只需要这么做:
MyClass myClass;
备用视频下载
技术, IT技术, CPP, 视频教程
风险提示及免责条款
市场有风险,投资需谨慎。本文不构成个人投资建议,也未考虑到个别用户特殊的投资目标、财务状况或需要。用户应考虑本文中的任何意见、观点或结论是否符合其特定状况。据此投资,责任自负。本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处。如若内容有涉嫌抄袭侵权/违法违规/事实不符,请点击 举报 进行投诉反馈!
