编译时的编程机制
来源:互联网 发布:淘宝货物怎么上架 编辑:程序博客网 时间:2024/06/15 17:03
1.阶乘
template<int n> class Factorial{public: enum{ val=Factorial<n-1>::val*n };};template<> class Factorial<0>{public: enum{ val=1 };};Factorial<>::val; //120
2.斐波那契数列
template<int n> class Fib{public: enum{ val=Fib<n-1>::val+Fib<n-2>::val };};template<> class Fib<1>{public: enum{ val=1 };};template<> class Fib<0>{public: enum{ val=0 };};Fib<5>::val; //5
3.N的P次方
template<int N,int P> class Power{public: enum{ val=N*Power<N,P-1>::val };};template<int N> class Power<N,0>{public: enum{ val=1 };};Power<2,5>::val; //32
4.f(n)+f(n-1)….f(0)
template<int n, template<int> typename F> class Accumulate {public: enum { val=Accumulate<n-1,F>::val+F<n>::val };};template<template<int> typename F> class Accumulate<0, F> {public: enum { val=F<0>::val };};template<int n> class Identity {public: enum { val=n };};Accumulate<4, Identity>::val; //10
5.循环分解,整数幂
template<int n> inline int power(int m){ return power<n-1>(m)*m;};template<> inline int power<1>(int m){ return m;};template<> inline int power<0>(int m){ return 1;};power<3>(4); //64
6.编译时的条件选择:最大值
template<int n1,int n2> class Max{ enum{ val=n1>n2?n1:n2 };};Max<10,20>::val; //20
7.表达式模板
template<class, std::size_t> class MyVectorSum;template<typename T, std::size_t N> class MyVector {private: T data[N];public: MyVector<T, N> &operator=(const MyVector<T, N> &right) { for (std::size_t i = 0; i < N; ++i) { data[i] = right.data[i]; } return *this; } MyVector<T, N> &operator=(const MyVectorSum<T, N> &right); const T &operator[](std::size_t i) const { return data[i]; } T &operator[](std::size_t i) { return data[i]; }};template<typename T, std::size_t N> class MyVectorSum {private: const MyVector<T, N> &left; const MyVector<T, N> &right;public: MyVectorSum(const MyVector<T,N> &lhs,const MyVector<T,N> &rhs):left(lhs),right(rhs){} T operator[](std::size_t i) const { return left[i] + right[i]; }};template<typename T, std::size_t N> MyVector<T, N> &MyVector<T, N>::operator=(const MyVectorSum<T, N> &right) { for (std::size_t i = 0; i < N; ++i) { data[i] = right[i]; } return *this;}template<typename T,std::size_t N> inline MyVectorSum<T, N> operator+(const MyVector<T, N> &left, const MyVector<T, N> &right) { return MyVectorSum<T, N>(left, right);}template<typename T,std::size_t N>void init(MyVector<T, N> &v) { for (std::size_t i = 0; i < N; ++i) { v[i] = rand() % 100; }}template<typename T, std::size_t N> void print(MyVector<T, N> &v) { for (std::size_t i = 0; i < N; ++i) { std::cout << v[i] << ' '; } std::cout << endl;}void main() { srand(time(0)); MyVector<int, 5> v1; init(v1); print(v1); MyVector<int, 5> v2; init(v2); print(v2); MyVector<int, 5> v3; init(v3); print(v3); v3.operator=(MyVectorSum<int, 5>(v2, v3));}
0 0
- 编译时的编程机制
- java的编译机制
- .net的编译机制
- java动态编程-动态编译机制
- spark的工作机制详细介绍、spark源码编译、spark编程实战
- java源码的编译机制
- 利用java反射机制绕过编译时的类型检查
- Windows编程的剪贴板机制
- 基础知识:编程的工作机制
- windows的并发编程机制
- Windows编程的剪贴板机制
- Windows编程的剪贴板机制
- Windows编程的通信机制
- C语言的编程机制
- Java编程的内存机制
- Future机制用于并发编程时的死锁检测
- Halcon与C#联合编程时的内存回收机制
- java编译静态常量的机制
- 【CF 534F】Game
- poj1260(形如E[j]=opt{D+w(i,j)}的dp)
- Groovy官网
- Swift中关于字符串的相关操作
- 404错误页面处理
- 编译时的编程机制
- 23种设计模式 第二部分 结构模式(4) 外观模式
- VB2012学习
- 第六章 第三节 按钮控件
- Android缓存
- Servlet和Jsp中的Request转发、重定向
- 最长公共子串和最长公共子序列
- java中IO整理
- POJ1256