首页 > 编程语言 >有趣的C++模板代码

有趣的C++模板代码

时间:2024-08-27 16:55:25浏览次数:8  
标签:Do CNAny C++ CNb CNa TEST CNAll 有趣 模板

 1 #include <iostream>
 2 template <typename ... Ts>
 3 struct CNAny {
 4     static bool Do(int i) {
 5         return (Ts::Do(i) || ...);
 6     }
 7 };
 8 
 9 template <typename ... Ts>
10 struct CNAll {
11     static bool Do(int i) {
12         return (Ts::Do(i) && ...);
13     }
14 };
15 
16 struct CNa {
17     static bool Do(int i) {
18         return i > 5;
19     }
20 };
21 
22 struct CNb {
23     static bool Do(int i) {
24         return i < 10;
25     }
26 };
27 
28 #define TEST(e) do {\
29     bool yes = (e); \
30     std::cout << #e << " = " << yes << std::endl; \
31 } while (0)
32 
33 int main() {
34     using CNAny_CNa_CNb = CNAny<CNa, CNb>;
35     TEST( CNAny_CNa_CNb::Do(1)  );
36     TEST( CNAny_CNa_CNb::Do(7)  );
37     TEST( CNAny_CNa_CNb::Do(12) );
38     
39     using CNAll_CNa_CNb = CNAll<CNa, CNb>;
40     TEST( CNAll_CNa_CNb::Do(1)  );
41     TEST( CNAll_CNa_CNb::Do(7)  );
42     TEST( CNAll_CNa_CNb::Do(12) );
43     
44     return 0;
45 }

输出内容:

CNAny_CNa_CNb::Do(1) = 1
CNAny_CNa_CNb::Do(7) = 1
CNAny_CNa_CNb::Do(12) = 1
CNAll_CNa_CNb::Do(1) = 0
CNAll_CNa_CNb::Do(7) = 1
CNAll_CNa_CNb::Do(12) = 0

 

标签:Do,CNAny,C++,CNb,CNa,TEST,CNAll,有趣,模板
From: https://www.cnblogs.com/rexfield/p/18383046

相关文章

  • P8436 【模板】边双连通分量
         ~~~~~     P8436【模板】边双连通分量     ~~~~~......
  • C++学习随笔——算法transform和lambda的用法
    std::transform是一个常用的STL算法,用于对序列中的每个元素进行操作,并将结果存储在另一个序列中。lambda表达式是一种匿名函数,可以在需要传递函数作为参数的场景中使用,比如在std::transform中。语法://一元操作std::transform(InputIterator1first1,InputIterator1la......
  • P1656 炸铁路(割边模板)
         ~~~~~     原题链接     ~~~~~     总题......
  • C++学习随笔——C++仿函数的应用方法
    仿函数的基本定义仿函数(Functor),也称为函数对象(FunctionObject),是一个行为像函数的对象。实现仿函数的方法是重载类中的operator()操作符,使得对象能够像调用普通函数一样使用。仿函数的主要优势是它们可以拥有状态,并且可以被用于STL算法和容器中。简单例子:点击查看代码#in......
  • C++入门第一课
    我准备再出一个合集,这个合集主要是讲C++一些知识,主要是因为懒得写洛谷题解(´ー∀ー`),适合新手学习。本人语文不太好,有些用词不太恰当,还请各位多多指正o( ̄︶ ̄)oOK我们现在就开起C++学习吧ヾ(≧▽≦*)o!第一课认识C++要学习C++,就首先要知道C++是什么。1.C++是一种面向对象的计算机程......
  • C++学习笔记——范围基于 for 循环和for_each循环的区别
    范围基于for循环是C++11中引入的,简化了遍历数组或容器的代码点击查看代码#include<iostream>#include<vector>intmain(){std::vector<int>numbers={1,2,3,4,5};//使用范围基于for循环遍历for(intnum:numbers){std::cout<<num......
  • C++学习随笔——关联容器的迭代器失效问题
    常见关联容器的迭代器失效规则std::map和std::set:插入元素:插入新元素不会使任何已有的迭代器失效。你可以在插入新元素后继续使用所有现有的迭代器。删除元素:删除某个元素会导致指向该元素的迭代器失效。除此之外,所有指向其他元素的迭代器仍然有效。如果在遍历过程中删除......
  • 从零开始学习C++之递归
    递归注:此算法与函数有关,如不了解请移步。在wikipedia中,递归的解释是这样的:在C++中,递归就是指在函数中调用函数本身;递归的作用类似于分治,将一个大问题分解为很多小问题进行求解。但是递归的时间复杂度极高,因为要解决很多小问题,所以时间复杂度高达\(O(2^n)\)。使用递......
  • C++/Qt 多媒体(续二)
    一、前言        前边讲述到了Qt的两项独特的模块编程支持的另一项内容——多媒体编程,上篇文章具体讲述的包括一个QMediaPlayer类的示例代码和一个QSoundEffect类的讲解,而本章将会提供一篇示例代码——《基于QMediaRecorder类的音频录制》。    对于上篇内......
  • C++面试基础系列-this指针
    系列文章目录文章目录系列文章目录C++面试基础系列-this指针Overview1.this指针1.1.特性1.2.用法1.3.注意事项2.使用'this'指针的多态类的示例3.在C++中,指针和对象本身有什么区别?关于作者C++面试基础系列-this指针Overview1.this指针在C++中,this指针是一......