VC6不支持的模板特性

1. 部分特化

 

2. 模板嵌套(即template< template <... > >

 

3. 模板参数形式匹配(不知道该用什么名字描述合适):

template<typename TType> struct PtrType2Type;
template<typename TType> struct PtrType2Type<TType *>
{
    typedef TType Result;
};

第二行指定模板参数的形式必须是某个类型的指针。无法编译通过。

 

4. 从对常数型模板参数做推导时,该模板参数必须在模板参数列表的第一位:

template<int Value>
struct Int2Type
{
    enum { value = Value };
};

template<int Index, class TType>
void Test(TType &data, Int2Type<Index>)
{

    cout << data << endl;
}

int main(int argc, char* argv[])
{
    Test(1, Int2Type<0>());

    return 0;
}

上面的程序可以正常运行,输出1 。但如果把

template<int Index, class TType>
改成

template<class TType, int Index>

程序可以编译通过,但运行时什么也不会输出,看起来是

Test(1, Int2Type<0>());

这一行被直接忽略掉了!

 

5. 模板成员函数的模板参数只能通过函数实参让编译器去推导,而不能显示指定。

struct SomeClass
{
    template<class T>
    void Test(T & t)
    {
    }
};

int main(int argc, char* argv[])
{
    SomeClass obj;
    obj.Test(2);

    return 0;
}
这样是可行的。如果改成这样:

 

struct SomeClass
{
    template<class T>
    void Test()
    {
    }
};

int main(int argc, char* argv[])
{
    SomeClass obj;
    obj.Test<int>();

    return 0;
}

将无法编译通过,编译器提示 type 'int' unexpected

如果再改成静态成员函数,这样:

 

struct SomeClass
{
    template<class T>
    static void Test()
    {
    }
};

int main(int argc, char* argv[])
{
    SomeClass::Test<int>();

    return 0;
}

也无法编译通过,而且是 NTERNAL COMPILER ERROR

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值