标题:一些关于 template的问题
只看楼主
allenz0810
Rank: 2
等 级:论坛游民
帖 子:44
专家分:38
注 册:2012-9-3
结帖率:100%
已结贴  问题点数:5 回复次数:4 
一些关于 template的问题
请问 当

template<class T>
class Test   
{
    public:
    char aFunction();   
}

为什么实现那个 aFunction()的时候需要加
template<class T>
char Test<T>::aFunction()//这里为什么要加这个 那个T 进去?? 我知道模版可以让int double char 什么都可以反问, 但是为什么这里需要<T>? 这个不是已经定义了 char 返回类型了吗?
                         //要是 T Test::aFunction() 可以理解成它什么类型都可以返回吗?

还有一个问题就是 template<class T, int size = 50> 这列面的 int size = 50 和在其他地方定义的有什么不一样吗?


[ 本帖最后由 allenz0810 于 2012-11-11 11:42 编辑 ]
搜索更多相关主题的帖子: double public 
2012-11-11 11:38
newdos
Rank: 9Rank: 9Rank: 9
等 级:禁止访问
威 望:6
帖 子:251
专家分:1169
注 册:2012-8-13
得分:5 
你可以在template里面实现你的代码,如果在template外面实现成员函数,Test<T>::xxxxx是必须的语法,不加T肯定会引起编译错。

如果是返回T型的返回类型,比如说

template <typename T>
class Test
{
    T t;
public:
    T aFunction(void){ return t; }
};

返回的参数类型必然和模版的参数相对应。

又比如如下程序:
#include <iostream>
template <typename T>
class Test
{
    T t;
public:
    template <typename M>
    M max (M const &A1, M const &A2)
    {
        return A1 > A2 ? A1 : A2;
    }
};

using namespace std;

int main()
{
    Test<int> t;
    cout << t.max(10, 20) << endl; // 返回一个最大值,int型
    cout << t.max(3.1f, 2.5f) << endl; // 同样,但返回是float或是double型。
}

template<class T, int size = 50> 中的int size = 50表示的是一个常量型参,而且默认值是50.
如果用户代码只提供class T型参Test<char> test,则size默认值是50, 如果用户代码这样写:Test<char, 20> test,则size的值不是50,而是20.
2012-11-11 12:17
newdos
Rank: 9Rank: 9Rank: 9
等 级:禁止访问
威 望:6
帖 子:251
专家分:1169
注 册:2012-8-13
得分:0 
多看书吧,这些都是书上有的东西,学习STL的时候,先学会使用,《标准模板库自修教程与参考手册 STL进行C++编程》可以做为你的参考书。
然后学习模版,<C++ Template>一书可以做为你的入门参考书,《C++ primer》中关于模版的东西讲得太少。然后你就可以读STL源代码了,全是模版写成的。
2012-11-11 12:28
allenz0810
Rank: 2
等 级:论坛游民
帖 子:44
专家分:38
注 册:2012-9-3
得分:0 
多谢楼上的 回答的很好
2012-11-12 02:41
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:0 
为什么是 template<class T> char Test<T>::aFunction()
而不是 char Test::aFunction()?
答:若如此,则在定义中无法使用T,因为T没定义

为什么是 template<class T> char Test<T>::aFunction()
而不是 template<class T> char Test::aFunction()?
答:因为C++允许特化,编译器不知道是Test<int>::aFunction,还是Test<double>::aFunction
2012-11-12 08:35



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-386700-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.058064 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved