STL中的型别

一、常整数映射为型别

Alexandrescu提出的简单而有用的template

template <int v>

struct Int2Type

{

    enum { value = v };

};

template <typename T, bool isPolymorphic>

class NiftyContainer

{

private:

            void DoSomething(T* pObj, int2Type<true>)

            {

                    T* pNewObj = pObj->Clone();

                     .....

            }

             void DoSomething(T* pObj, int2Type<false>)

            {

                    T* pNewObj = new T(*pObj);

                     .....

            }

public:

            void DoSomething (T* pObj)

            {

                    DoSomething(pObj, Int2Type<isPolymorphic> ( ) );

            }

};

上面的小技巧之所以有效是因为:编译器并不会去编译一个未被使用到的template函数,只会对它进行文法检查。

 

二、型别对型别的映射

template <typename T>

struct Type2Type

{

    typedef T Type;

};

template <class T, class U>

T* create(const U&arg, Type2Type<T>)

{

    return new T(arg);

}

template <class U>

Widget* create(const U& arg, Type2Type<Widget>)

{

    return new Widget(arg, -1);

}

String* pStr = create("hello", Type2Type<String> ( ) );

Widget* pW = create(100, Type2Type<Widget> ( ) );

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值