全特化终结这个递归模板
来源:互联网 发布:软件项目管理内容 编辑:程序博客网 时间:2024/06/17 00:49
#include "stdafx.h"
#include<iostream>
using namespace std;
template<typename T>
class A
{
private:
A<void*> impl; // 有个问题: A<T> 之中包含另一个 A<void*> 成员, 构成递归声明
public:
void test(T* p)
{
impl.test(p);
}
};
/*
上面报错误 C2460 “List<void *>::impl”: 使用正在定义的“List<void *>
下面加以一个全特化,终结这个递归圈
*/
template<>
class A<void*>
{
public:
inline void test(void* p)
{
cout << "test: " << p << endl;
}
};
//------------------------求和---------------------
template<int N>
class Sum
{
public:
enum//用枚举类型,因为用变量,它不会去在编译期推导值的(C++类成员变量初始化不能放在类定义中)
{
value = N + Sum<N - 1>::value
};
};
//需要特化0, 特化到哪里,定义就停在哪里, 如果特化到-1, 则结果到-1
template<>
class Sum<0>
{
public:
enum
{
value = 0
};
};
//-------------------------------二进制转十进制-------------------------------------------
// 主模板
template<unsigned long N>
struct BinToDec
{
static const unsigned val = BinToDec<N / 10>::val * 2 + N % 10;
};
template<>
struct BinToDec<0>//特化
{
static const unsigned val = 0;
};
//----------------------------------求前两项的和----------------------------------------
// 主模板
template<int N>
struct Fib
{
enum { Result = Fib<N - 1>::Result + Fib<N - 2>::Result };//需要特化2个连续的值
};
// 完全特化版
template <>
struct Fib<1>
{
enum { Result = 1 };
};
// 完全特化版
template <>
struct Fib<0>
{
enum { Result = 0 };
};
int main()
{
int t = 5;
A<int> a;
a.test(&t);
//---------------------
Sum<300> s; //300的不能太大,会出错
cout << s.value << endl;
//---------------------
cout << BinToDec<10000>::val << endl;
cout << BinToDec<1000000>::val << endl;
//---------------------
int fib = Fib<10>::Result;
cout << fib << endl;
};
#include<iostream>
using namespace std;
template<typename T>
class A
{
private:
A<void*> impl; // 有个问题: A<T> 之中包含另一个 A<void*> 成员, 构成递归声明
public:
void test(T* p)
{
impl.test(p);
}
};
/*
上面报错误 C2460 “List<void *>::impl”: 使用正在定义的“List<void *>
下面加以一个全特化,终结这个递归圈
*/
template<>
class A<void*>
{
public:
inline void test(void* p)
{
cout << "test: " << p << endl;
}
};
//------------------------求和---------------------
template<int N>
class Sum
{
public:
enum//用枚举类型,因为用变量,它不会去在编译期推导值的(C++类成员变量初始化不能放在类定义中)
{
value = N + Sum<N - 1>::value
};
};
//需要特化0, 特化到哪里,定义就停在哪里, 如果特化到-1, 则结果到-1
template<>
class Sum<0>
{
public:
enum
{
value = 0
};
};
//-------------------------------二进制转十进制-------------------------------------------
// 主模板
template<unsigned long N>
struct BinToDec
{
static const unsigned val = BinToDec<N / 10>::val * 2 + N % 10;
};
template<>
struct BinToDec<0>//特化
{
static const unsigned val = 0;
};
//----------------------------------求前两项的和----------------------------------------
// 主模板
template<int N>
struct Fib
{
enum { Result = Fib<N - 1>::Result + Fib<N - 2>::Result };//需要特化2个连续的值
};
// 完全特化版
template <>
struct Fib<1>
{
enum { Result = 1 };
};
// 完全特化版
template <>
struct Fib<0>
{
enum { Result = 0 };
};
int main()
{
int t = 5;
A<int> a;
a.test(&t);
//---------------------
Sum<300> s; //300的不能太大,会出错
cout << s.value << endl;
//---------------------
cout << BinToDec<10000>::val << endl;
cout << BinToDec<1000000>::val << endl;
//---------------------
int fib = Fib<10>::Result;
cout << fib << endl;
};
0 0
- 全特化终结这个递归模板
- 模板特化,全特化,偏特化,全部特化,部分特化
- 模板全特化
- 模板的全特化与偏特化
- 模板的全特化与偏特化
- 类模板的 全特化、偏特化
- 模板全特化和偏特化
- C++ 模板全特化中的函数特化
- 函数模板全特化与偏特化
- C++ 模板全特化和偏特化
- C++模板偏特化和全特化
- 模板的全特化与偏特化
- 模板的全特化与偏特化
- 模板的全特化与偏特化
- 模板全特化和偏特化
- 模板的全特化与偏特化
- C++模板全特化、偏特化
- 模板全特化与偏特化
- Android之配置方法数超过64K的应用
- typedef int (* func)(int ,int )
- youtube上传视频
- coreldraw注册机无法成功下载的原因及其使用方法
- 符号文件
- 全特化终结这个递归模板
- 信息安全工程师 学习笔记(十七)
- Android开发之getX,getRawX,getWidth,getTranslationX等的区别
- JavaScript中offsetWidth的'bug'及其对策
- tee函数
- CodeForces
- vue项目 构建部署
- 【数论】洛谷 P1548 棋盘问题
- CSU-1008-Horcrux