首页 > 编程语言 >C++ 模板 使用 enum 代替 typename

C++ 模板 使用 enum 代替 typename

时间:2023-05-23 16:33:02浏览次数:42  
标签:int enum C++ typename TestClassTemplate template print class


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还能这么用,于是就有上了上面的例子.

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



标签:int,enum,C++,typename,TestClassTemplate,template,print,class
From: https://blog.51cto.com/u_9420214/6333323

相关文章

  • SQLite3 客户端程序,Win32 SDK ,C/C++
    1 WIn32SDK程序,尽量放在一个文件中,主要用到Tree,ListView,Edit控件。2 把控件封装成类,但不封装窗口回调函数。类实例为全局变量,方便消息回调函数调用执行。这样做最简单。3 Edit控件处理按键输入,模仿shell执行SQL查询4打开数据库文件时若没有此文件则新建,否则打开,打开......
  • c++的前世今生
    C++语言是本贾尼·斯特劳斯特卢普在1982年发明的,早期版本被称为CwithClasses,之后在1983年更名为C++。C++语言在发明后很快就获得了广泛的应用,由于其具有高效、灵活和兼容性强的特点,成为了许多领域的首选编程语言。在计算机科学和工程领域,C++语言被广泛用于开发操作系统、......
  • 【重学C++】04 | 说透C++右值引用(上)
    文章首发【重学C++】04|说透C++右值引用、移动语义、完美转发(上)引言大家好,我是只讲技术干货的会玩code,今天是【重学C++】的第四讲,在前面《03|手撸C++智能指针实战教程》中,我们或多或少接触了右值引用和移动的一些用法。右值引用是C++11标准中一个很重要的特性。第一次接......
  • C++ 手搓 CNN 卷积神经网络
    代码请自取https://github.com/xoslh/CNN-MNIST-CPP-1卷积神经网络-CNN的基本原理​ 卷积神经网络(ConvolutionalNeuralNetworks,CNNs)是一种深度学习算法,特别适用于图像处理和分析。其设计灵感来源于生物学中视觉皮层的机制,是一种强大的特征提取和分类工具。1.1Layers......
  • Linq/Enumerable.cs
    usingSystem;usingSystem.Collections;usingSystem.Collections.Generic;usingSystem.Threading;//IncludeSilverlight'smanagedresources#ifSILVERLIGHTusingSystem.Core;#endif//SILVERLIGHTnamespaceSystem.Linq{publicstaticpartialc......
  • c++模板例题
    一、问题描述。1 编写一个程序,使用类模板对数组元素进行排序,倒置、查找和求和2 具有对数组元素进行排序,倒置、查找和求和功能,3 然后产生类型实参分别为int型和double型的两个模板类,4 分别对整型数组与双精度数组完成所要求的操作 实现代码: #include<iostream> using name......
  • c++打卡练习(36)
    求多项式的和以50为例S=1+1/2+1/2*3+1/2*3*4+......1/2*3*.....*50流程图:伪代码:源代码:#include<iostream>usingnamespacestd;intmain(){ doublea=1,b,num,N; cout<<"输入你想阶乘到的最大数"<<endl; cin>>N; for(inti=1;i<=N;i++){ a*=i; b=1/a; num......
  • c++打卡第三十四天
    一、勾股数1、问题描述 2、设计思路   由题可知,数学中并不存在两条直角边相等的勾股数,同时两个直角边的平方和并不一定是整形,可能会存在小数,这样我们的判断勾股数的方法就是,两个直角边的平方和开根号,对此值强制转化为整形,得到的结果进行平方看是否与两直角边的平方和相......
  • C++的cout
    ▲setw(n)用法:通俗地讲就是预设宽度如cout<<setw(5)<<255<<endl;结果是:(空格)(空格)255▲setfill(charc)用法:就是在预设宽度中如果已存在没用完的宽度大小,则用设置的字符c填充如cout<<setfill('@')<<setw(5)<<255<<endl;结果是:@@255▲setbase(i......
  • c++的流
    C++getline函数用法getline()函数是一个比较常见的函数。根据名字直接望文生义,就知道这个函数是来完成读入一行数据。下面就对C++--getline()函数的用法说明,以及getline()函数作为while条件的问题,总结一下:在C++中本质上有两种getline函数:第一种:在头文件<istream>中,是iostr......