注册 登录
编程论坛 C++教室

型别是什么意思

最近不在 发布于 2010-07-11 19:48, 1229 次点击
template <class T>
class A
{
    typename T::SubType *ptr;
};
typename指出SubType是class T中定义的一个型别,因此ptr
是一个指向T::SubType型别的指针。

typename的用法,还有这个型别的意思不懂。
6 回复
#2
cnfarer2010-07-11 20:22
这个好像不是大陆地区的说法,其实就是类型。
#3
lintaoyn2010-07-11 20:37
说明T::SubType是一个类型。ptr就是指向T::SubType的指针。你要是不加typename的话编译器会理解成做乘法。编译器把T::SubType解释成类T里的数据成员。
#4
lintaoyn2010-07-11 20:38
说明T::SubType是一个类型。ptr就是指向T::SubType的指针。你要是不加typename的话编译器会理解成做乘法。编译器把T::SubType解释成类T里的数据成员。
#5
最近不在2010-07-11 21:07
这样做有什么意义吗?能举点例子吗?还有这个T都未定义,如何来的SubType,更别说定义指向指向它的指针...不太懂,求例子
还有照这么说template <class T> T就是一货真价实的类?

#6
lintaoyn2010-07-11 22:20
如果你的类里没有SubType那不通不过编译的,模板实例化时编译器要做检查的。没有用typename默认里面的名字都是变量名而不是类型名,这也是为什么引进typename这个关键字,本来只是不打算引进关键字的,后来没办法解释一个名字是类名还是变量的才引进typename这个关键字。书里说的…BJ说的。
#7
最近不在2010-07-12 07:37
程序代码:
// Note:Your choice is C++ IDE
#include <iostream>
using namespace std;

template <class T>
class A
{
public:
    typename T::SubType *ptr;
};

class T
{
public:
    typedef char SubType;
};

int main()
{
    int n = 68;
   
    A<int> obj;
   
    obj.ptr =  reinterpret_cast<char *> (&n);
   
    cout<<*(obj.ptr)<<endl;
   
    return 0;
}
刚开始我没写T的定义,编译通过了,是因为main函数也写动容。后来自己尝试写了个例子,清晰了!
1