C++ 模板 使用 enum 代替 typename

enum testEnum {A, B, C};

template <testEnum C>
class TestClassTemplate {
public:
    void print() {
        printf("common\n");
    }
};

template <>
class TestClassTemplate<A> {
public:
    void print() {
        printf("specific int\n");
    }
};



int main() {

    TestClassTemplate<B> doubleClassTemplate;
    TestClassTemplate<A> intClassTemplate;
    doubleClassTemplate.print();
    intClassTemplate.print();
}

//Res:
//common
//specific int

C++ 模板使用 enum 取代 typename/class

察看 gnu的shared_ptr实现,偶然发现这样:

  // Empty helper class except when the template argument is _S_mutex.
  template<_Lock_policy _Lp>
    class _Mutex_base
    {
    protected:
      // The atomic policy uses fully-fenced builtins, single doesn't care.
      enum { _S_need_barriers = 0 };
    };
 
template<_Lock_policy _Lp> 对这一句,有些疑惑,自己印象里template 后面跟的都是 <class/typename A> 或者<>, 但是还没见过这种的,

后来跟发现:

enum _Lock_policy { _S_single, _S_mutex, _S_atomic }; 原来是个enum, 没想到enum还能这么用,于是就有上了上面的例子.

应该属于比较偏门的用法吧?


  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值