使用类模板时的一点困惑

 1 #include<string>
 2 #include<iostream>
 3
 4 using namespace std;
 5
 6 ///通过嵌套实现元则
 7 template<typename T,typename N>
 8 class my_tuple
 9 {
10 public:
11     T value;
12     N next;
13     my_tuple(T const &v,N const &n):value(v),next(n){}
14 };
15 template<typename T,typename N>
16 my_tuple<T,N> push(T const &v,N const &n)
17 {
18     return my_tuple<T,N>(v,n);
19 }
20 int main()
21 {
22     typedef my_tuple<int ,char> tuple2;
23     typedef my_tuple<float,tuple2> tuple3;
24     typedef my_tuple<std::string,tuple3> tuple4;
25
26     tuple4 tup4 = push(std::string("awesome"),27               push(.5f,push(2,‘a‘)));
28     cout<<tup4.value<<","
29           <<tup4.next.value<",";
30     cout<<tup4.next.next.value<<","
31           <<tup4.next.next.next<<endl;
32      //此时输出结果为: awesome,0.52,a
33      //奇怪的是逗号少输出了一个
34      //开始我用的输出格式是cout<<tup4.value<<","<<tup4.next.value<","<<tup4.next.next.value<<","<<tup4.next.next.next<<endl;
35      //直接就报错了:test.cpp||error: invalid operands of types ‘const char [2]‘ and ‘int‘ to binary ‘operator<<‘
36 }

希望大神们看到了能给出一点提示

使用类模板时的一点困惑

时间: 2024-11-07 16:28:43

使用类模板时的一点困惑的相关文章

C++中的类模板详细讲述

一.类模板定义及实例化 1. 定义一个类模板: 1 template<class 模板参数表>2 3 class 类名{4 5 // 类定义......6 7 }: 其中,template 是声明类模板的关键字,表示声明一个模板,模板参数可以是一个,也可以是多个,可以是类型参数 ,也可以是非类型参数.类型参数由关键字class或typename及其后面的标识符构成.非类型参数由一个普通参数构成,代表模板定义中的一个常量. 例: 1 template<class type,int widt

C++类模板

在上篇文章(C++函数模板)中,主要介绍了C++中函数模板,与函数相似,类也可以被一种或多种类型参数化.容器类就是一个具有这种特性的典型的例子, 本文地址:http://www.cnblogs.com/archimedes/p/cpp-class-template.html,转载请注明源地址. 以下通过设计一个类模板Stack的实现来说明: 类模板Stack的实现 #include<iostream> #include<vector> #include<stdexcept&g

C++:类模板与模板类

6.3 类模板和模板类 所谓类模板,实际上是建立一个通用类,其数据成员.成员函数的返回值类型和形参类型不具体指定,用一个虚拟的类型来代表.使用类模板定义对象时,系统会实参的类型来取代类模板中虚拟类型从而实现了不同类的功能. 定义一个类模板与定义函数模板的格式类似,必须以关键字template开始,后面是尖括号括起来的模板参数,然后是类名,其格式如下: template <typename 类型参数> class 类名{       类成员声明 }; 或者 template <class

c++类模板深度剖析

1.类模板的泛指类型可以定义多个 template <typename T1, typename T2> class Test { public: void add(T1 a, T2, b); }; 使用时: Test<int, float> t1; //T1的泛指类型就是int, T2的泛指类型就是float. 2.类模板的特化类型 (1)意思就是如果定义了一个类模板,这个类模板的参数有多个,但是如果当使用这个类模板的时候,我们传递参数时,参数的类型是一样的话,编译器就会将类模板

初步C++类模板学习笔记

类模板 实现:在上课时间的定义给它的一个或多个参数,这些参数代表了不同的数据类型.                              -->抽象的类. 在调用类模板时, 指定參数, 由编译系统依据參数提供的数据类型自己主动产生对应的模板类                   -->详细的类. 类模板的定义 C++的类模板的写法例如以下: template <类型參数表> //类型參数表的写法就是:class 类型參数1, class 类型參数2, - class 类模板名

函数、类模板

泛型程序设计 算法实现时不指定具体要操作的数据的类型.适用于多种数据结构. 函数模板 Template <class 类型参数1,class类型参数2,…..> 返回值类型 模板名(形参表) { 函数体: } 函数模板可以重载,只要它们的形参表不同即可. C++编译器遵循以下优先顺序: 先找参数完全匹配的普通函数(非由模板实例化而得的函数) 再找参数完全匹配的模板函数 再找实参经过自动类型转换后能匹配的普通函数 上面的都不符合则报错. 可以在函数模板中使用多个类型参数,可以避免二义性. #in

类模板使用说明

类模板声明 1 2 3 4 5 6 7 8 9 10 11 12 13 14 //通常形式 template <typename TypeParam> class SomeClass {     //...SomeClass的成员 }; //或者 template <typename TypeParam1,...,typename TypeParamn> class SomeClass {     //...SomeClass的成员 }; 在这些形式中,TypeParam是命名将要

C++入门经典-例9.3-类模板,简单类模板

1:使用template关键字不但可以定义函数模板,而且可以定义类模板.类模板代表一族类,它是用来描述通用数据类型或处理方法的机制,它使类中的一些数据成员和成员函数的参数或返回值可以取任意数据类型.类模板可以说是用类生成类,减少了类的定义和数量. 2:类模板的一般定义形式如下: template <类型形式参数表> class 类模板名 { ...//类模板体 } 类模板成员函数的定义形式如下: template <类型形式参数表> 返回类型 类模板名 <类型名表>::

Xcode6中如何使用自定义的类模板

说到IOS类的模板,有些人感觉很陌生,但是只要有开发过IOS程序的人,其实都用过类的模板,只不过是用的系统自带的类的模板. 例如创建一个ClassTemplateVC继承于UIViewController 创建出来的ClassTemplateVC如下: #import "ClassTemplateVC.h" @interface () @end @implementation ClassTemplateVC - (void)viewDidLoad { [super viewDidLoa