`
isiqi
  • 浏览: 16623071 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

Item 46 模板需要类型转换的时候

阅读更多

把Item 24的例子改成模板:

定义operator*为非成员函数是为了支持混合运算。可是上面的代码却编译不过。为什么?
问题出在模板参数推导。
对于operator*来说,编译器只有推导出了T的类型,才能实例化该函数;然后编译器才能找到该函数;再然后调用该函数去处理两个操作数。
可是,编译器看着2这个数,迷惑了:如何从2推导出Rational<T>的T来呢?
编译器在着手推导T的时候,是不会去考虑使用隐式类型转换,把2变成Rational<int>,然后推导出int来的。
C++规定,隐式类型转换只发生在函数调用的时候。而在模板参数推导的时候,函数都还没有被建立出来!

C++是利用friend来解决这个问题的:

1> 用friend关键字
2> 把operator*的实现放到模板类的声明里,变成内联函数
然后才能编译、链接。

有时,要内联的函数体会很大,超过编译器的限制。此时会另外加一层:

分享到:
评论

相关推荐

    qt5编写的使用模板类工厂模式画图程序

    `addItemFromFactory`方法接收一个`BaseItemFactory`指针,然后尝试将其创建的`QGraphicsItem`转换为模板类型`T`。如果转换成功,该item将被添加到场景中。 在实际应用中,你可以根据需要创建多个工厂类,并将它们...

    语言的模板文件

    3. **模板文件的类型**:常见的模板文件类型有HTML、CSS、JavaScript、Markdown等。例如,HTML模板常用于构建动态网页,而Markdown模板则适用于生成结构化的纯文本文档。 4. **模板继承与部分**:在某些模板引擎中...

    jxls利用模板生成excel文件

    4. **结果导出**:最后,`jxls`将填充后的模板转换为一个新的Excel文件,这个文件包含了所有来自数据模型的信息。 ### 三、jxls的关键特性 1. **动态数据处理**:支持条件逻辑、循环、合并单元格等复杂操作,使得...

    Django模板语法视图向模板发送数据

    本节将深入探讨如何使用Django模板语法来向模板传递数据,以及如何利用模板语言进行逻辑处理,包括填充不同类型的Python数据、使用判断语句和循环语句。 首先,让我们了解如何向模板发送数据。在Django中,视图函数...

    java 通过模板生成 xml

    使用模板时,可以创建一个XML模板类,然后根据需要实例化并转换为XML。 ```java import javax.xml.bind.JAXBContext; import javax.xml.bind.Marshaller; // 定义模板类 @XmlRootElement(name = "root") public ...

    Angularjs标签模板加载原理

    3. 编译和链接过程将模板转换为可执行的DOM结构并与数据模型绑定。 理解这一原理对优化AngularJS应用性能、编写高效自定义指令以及调试问题都有很大帮助。通过深入学习和实践,你可以更自如地驾驭AngularJS的模板...

    php自定义模板引擎类

    `,`{foreach $array as $item}`会被转换成`foreach ($array as $item) { ... }`。 然后,我们需要考虑如何处理嵌套的模板和包含其他文件的模板。这通常通过引入一个`include`或者`extend`指令来完成。比如,我们...

    PythonWeb从入门到实战教程之6模板和模板引擎.zip

    模板过滤器是应用在变量上的函数,可以对变量的值进行转换或处理,例如格式化日期、转换大小写、截取字符串等。通过管道符(|)与变量连接,如`{{ variable|filter_name }}`。 5. 模板上下文: 模板上下文是传递给...

    使用xls或xlsx模板(jxls语法)导出Excel并下载的Demo

    设置合适的响应头,如Content-Type(application/vnd.ms-excel或application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,取决于模板类型),Content-Disposition(attachment,指定文件名),然后将...

    php模板技术的应用

    由于模板引擎通常会进行编译,将模板转换为纯粹的PHP代码,因此在处理大量请求时,可以减少解析和解释的时间,提高响应速度。同时,缓存机制可以进一步提升效率,避免重复编译和渲染已知的静态内容。 PHP模板技术也...

    Aspose无需模板导出Excel带Chart

    在描述中提到的“无需模板,导出Excel带chart图表”,意味着开发者可以使用Aspose.Cells API动态创建和编辑Excel文件,包括添加各种类型的图表,如柱状图、饼图、折线图等,而无需预先设计模板。这样可以极大地提高...

    Velocity Template的另类用法:生成XML

    Velocity Template,作为Apache开源组织提供的一个Java模板引擎,最初被设计用于Web开发中的视图层,帮助开发者将静态页面与动态数据分离。然而,它的应用并不仅限于此,正如标题所示,“Velocity Template的另类...

    精品--使用Latex制作简历的模板.zip

    - 安装LaTeX环境:首先,你需要安装一个LaTeX编译器,如MiKTeX或TeXLive。 - 获取模板:解压"精品--使用Latex制作简历的模板.zip",你会得到一个包含模板文件的文件夹,其中可能包含`.tex`源文件和所需的样式文件...

    WPF前台代码实现数据绑定,Listview中使用数据模版,数据转换

    最后,数据转换器(`IValueConverter`)在WPF中用于在数据绑定过程中转换数据类型。例如,如果需要将数字转换为颜色,可以创建一个转换器: ```csharp public class NumberToColorConverter : IValueConverter { ...

    More Effective C++((经典)).doc

    2. **尽量使用C++风格的类型转换** (ITEM M2) - C++提供了多种类型转换方式,包括C-style隐式转换、`static_cast`、`dynamic_cast`、`reinterpret_cast`和`const_cast`。C-style转换容易引起意外类型转换,而C++的...

    网鸟静态生成模板源代码分析

    解析器负责读取模板文件,识别其中的变量和控制结构(如循环、条件判断等),并将这些元素转换为可执行的代码。渲染器则根据解析后的结果,结合实际数据,生成最终的HTML输出。 在网鸟静态生成模板的源代码中,我们...

    xml转换教程,ppt和示例代码

    - **样式表(Stylesheet)**:XSLT的转换规则定义在样式表中,它包含模板(Template)和模式匹配(Pattern Matching)。 - **模板**:定义了如何处理特定的XML元素。 - **模式匹配**:指定何时应用某个模板,基于...

    FreeMarker

    这样,子模板可以继承父模板的结构,并根据需要覆盖或添加内容。 5. **日期和数字格式化**:FreeMarker 提供了内置的方法来格式化日期和数字,如 `${date?string("yyyy-MM-dd")}` 可以将日期对象转换为指定格式的...

    UC_template 模板引擎

    UC_template 是一个专门为简化 Web 开发而设计的模板引擎,主要应用于生成 HTML 输出,但也可以用于其他类型的文本生成。在这个详述中,我们将深入探讨 UC_template 的核心概念、使用方法以及其在实际项目中的应用。...

Global site tag (gtag.js) - Google Analytics