C++模板实例化

深入理解C++中第七章提到模板实例化参数的选择:函数的决议结果只和函数参数有关和返回值无关。记录一下。

测试程序如下:

#include <iostream>
using namespace std;
int foo(int d)
{
	cout << "int foo" << endl;
	return d+1;
}
double foo(double d)
{
	cout << "double foo" << endl;
	return d+1;
}
#include <iostream>
using namespace std;
extern int foo(int);
extern double foo(double);
template <class type>
class A {
private:
	int _val;
	type _member;
public:
	void invariant() { _member = foo(_val); }//形参为int,返回型为double,但调用foo(int)
	type type_dependent() {
		return foo(_member);//形参为double,调用foo(double)
	}
};

int main(int argc, char *argv[])
{
	A< double > a;
	a.invariant();
	a.type_dependent();
	return 0;
}

测试结果如下:

int foo

double foo

当模板有实例化具体类型时,才产生具体的对象类图:

Class A<double>
   size=12 align=4
   base size=12 base align=4
A<double> (0x0xb686e850) 0
时间: 2024-11-05 16:03:08

C++模板实例化的相关文章

模板实例化

如果说上一篇博文<模板名称>是教人怎么写模板,那么这一篇就是教人怎么使用模板. 模板实例化的复杂性在于:对于产生自模板的实体,它们的定义已经不再局限于源代码中的单一位置. 一.理解两个概念 (1)实例化:实例化在C++中通常指“根据类型创建一个对象”,但是在模板里面,实例化是指使用具体值替换模板实参,从模板中产生普通类,函数或者成员函数的过程. (2)特化:这个过程最后获得的试题就是我们所说的特化. 然而,实例化过程并不是特化的唯一方式,还有显式特化,通过引入一个template<>

函数申明对函数模板实例化的屏蔽

1.C++函数匹配顺序 C++语言引入模板机制后,函数调用的情形显的比C语言要复杂.当发生一次函数调用时,如果存在多个同名函数,则C++编译器将按照如下的顺序寻找对应的函数定义. (1)寻找一个参数完全匹配的函数,如果找到了就调用它. (2)寻找一个函数模板,并根据调用情况进行参数推演,如果推演成功则将其实例化,并调用相应的模板函数. (3)如果前面两种努力都失败了,则试着低一级的函数匹配方法,如通过类型转换能否达到参数匹配,如果可以,则调用它. 2. 函数申明对函数模板实例化的屏蔽 如果使用了

编译模板实例化

如果头文件中共有模板的定义,而且该头文件被多处包含,就会为该模板创建多个编译好的副本.这样做当然可行,但在含有多个模板的大程序中,所有目标文件都会包含每个编译好的模板副本,这样会令编译时间变得很长,而且目标文件很大, 下面是一些可选的方案: 1.在源文件中,使用指示字#pragma  interface 和#pragma implementation,就只会创建一个编译后的模板. 2.与使用两个prama相似,使用命令行选项-falt-external-templates编译所有源文件.这会告诉

SQL模板和模板实例化

需求:需要得出一个数据源DataTable,我已知SQL和HttpRequest如何,通过SQL模板的方式去实例化匹配HttpRequest中的参数实例化为查询SQL,最后返回DataTable 1.SQL模板 1 SELECT 2 SUBSTR(PLACENAME, instr(PLACENAME, '-') + 1) 场景名, 3 COUNT(*) 小区数, 4 SUM(ALARMCOUNT) 流量TB, 5 ROUND(SUM(USERCOUNT)) 在线用户, 6 SUM(TOTALFL

MOOC清华《面向对象程序设计》第8章:栈的实现(采用模板实例化)

3lztmo1xf豪已4兹6http://www.zcool.com.cn/collection/ZMTkxNTY1OTI=.html 6桓50劳爻拍62诽喜0栽2http://www.zcool.com.cn/collection/ZMTkxNTY3MDQ=.html yc恍6焊eu桌难4gwmhttp://www.zcool.com.cn/collection/ZMTkxNTY3MjQ=.html Oq68厦3难钟0献qhttp://www.zcool.com.cn/collection/Z

C++ Primer 学习笔记_77_模板与泛型编程 --实例化

模板与泛型编程 --实例化 引言: 模板是一个蓝图,它本身不是类或函数.编译器使用模板产生指定的类或函数的特定版本号.产生模板的特定类型实例的过程称为实例化. 模板在使用时将进行实例化,类模板在引用实际模板类型时实例化,函数模板在调用它或用它对函数指针进行初始化或赋值时实例化. 1.类的实例化 当编写Queue<int>qi时,编译器自己主动创建名为Queue<int>的类.实际上,编译器通过又一次编写Queue模板,用类型int取代模板形參的每次出现而创建Queue<int

C++模板之隐式实例化、显示实例化、隐式调用、显示调用和模板特化详解

代码编译运行环境:VS2012+Debug+Win32 模板的实例化指函数模板(类模板)生成模板函数(模板类)的过程.对于函数模板而言,模板实例化之后,会生成一个真正的函数.而类模板经过实例化之后,只是完成了类的定义,模板类的成员函数需要到调用时才会被初始化.模板的实例化分为隐式实例化和显示实例化. 对函数模板的使用而言,分为两种调用方式,一种是显示模板实参调用(显示调用),一种是隐式模板实参调用(隐式调用).对于类模板的使用而言,没有隐式模板实参和显式模板实参使用的说法,因为类模板的使用必须显

C++ template —— 实例化和模板实参演绎(四)

本篇讲解实例化和模板实参演绎------------------------------------------------------------------------------------------------------------第10章 实例化------------------------------------------------------------------------------------------------------------模板实例化是一个过程,它

C++ 模板与泛型编程

<C++ Primer 4th>读书笔记 所谓泛型编程就是以独立于任何特定类型的方式编写代码.泛型编程与面向对象编程一样,都依赖于某种形式的多态性. 面向对象编程中的多态性在运行时应用于存在继承关系的类.我们能够编写使用这些类的代码,忽略基类与派生类之间类型上的差异. 在泛型编程中,我们所编写的类和函数能够多态地用于跨越编译时不相关的类型.一个类或一个函数可以用来操纵多种类型的对象. 面向对象编程所依赖的多态性称为运行时多态性,泛型编程所依赖的多态性称为编译时多态性或参数式多态性. 模板是泛型