简介

参考书籍

C++模板元编程实战 -- 李伟

感觉这本书很超值,因为 zsvh 知乎大佬都给写题序了

简单code

header

#include <iostream>
// 顺序结构
template <typename T>
struct RemoveReferenceConst_ {
private:
using inter_type = typename std::remove_reference<T>::type;
public:
using type = typename std::remove_const<inter_type>::type;
}; template <typename T>
using RemoveReferenceConst = typename RemoveReferenceConst_<T>::type; // 分支结构
namespace tt{
template <bool B, typename T, typename F>
struct conditional {
using type = T;
}; template <typename T, typename F>
struct conditional<false, T, F>{
using type = F;
}; template <bool B, typename T, typename F>
using conditional_t = typename conditional<B, T, F>::type;
} // 分支结构2 部分特化
struct A; struct B;
template <typename T>
struct Fun_ {
constexpr static size_t value = 0;
}; template<>
struct Fun_<A> {
constexpr static size_t value = 1;
}; template<>
struct Fun_<B> {
constexpr static size_t value = 2;
}; // 分支结构3 部分特化简化版本 C++14
template<typename T>
constexpr size_t Fun = 0; template<>
constexpr size_t Fun<A> = 1; template<>
constexpr size_t Fun<B> = 2; /**
* @description: 完全特例化 转为 部分特例化
* @param {*}
* @return {*}
*/
/*
* template <typename TW>
* struct Wrapper {
* template <typename T>
* struct Fun_ {
* constexpr static size_t value = 0;
* };
* template <>
* struct Fun_<int> {
* constexpr static size_t value = 1;
* };
* };
*
*/ struct Wrapper {
template <typename T, typename TDummy = void>
struct Fun_ {
constexpr static size_t value = 0;
};
template <typename TDummy>
struct Fun_<int, TDummy> {
constexpr static size_t value = 1;
};
}; // 分支结构实现结构3 利用这个结构实现同名函数返回值不同的操作
namespace ss{
template <bool B, typename T = void>
struct enable_if {}; template <class T>
struct enable_if<true, T> {using type = T; }; template <bool B, class T = void>
using enable_if_t = typename enable_if<B, T>::type;
} template <bool IsFeedbackOut, typename T, ss::enable_if<IsFeedbackOut>* = nullptr>
auto FeedbackOut_(T&&){
return 1;
}
template <bool IsFeedbackOut, typename T, ss::enable_if_t<!IsFeedbackOut>* = nullptr>
auto FeedbackOut_(T&&) {
return 2.0f;
}
#include "header.hh"
using namespace std;
int main(){
RemoveReferenceConst<const int&> h = 3;
cout << h << endl;
tt::conditional<true, int, float>::type x = 3; // 不能用std 因为会和库里面的std冲突
tt::conditional_t<false, int, float> y = 1.0f;
cout << x << endl;
cout << y << endl;
constexpr size_t h1 = Fun_<B>::value;
cout << h1 << endl; constexpr size_t h2 = Fun<B>;
cout << h2 << endl; FeedbackOut_<true, int>(2);
}

C++ 元函数的学习一的更多相关文章

  1. STL学习小结

    STL就是Standard Template Library,标准模板库.这可能是一个历史上最令人兴奋的工具的最无聊的术语.从根本上说,STL是一些"容器"的集合,这些" ...

  2. 学习STL-介绍一下STL

    从大学时就开始学习C++,到现在近5年的时间了却很少用到STL.现在想想真得是对不起这门语言,也对不起宝贵的五年光阴.我钟爱C++,所以一定要完全搞懂它,理解它.爱一个人的前提是要懂他(她),爱一门语 ...

  3. ###STL学习--适配器

    点击查看Evernote原文. #@author: gr #@date: 2014-08-24 #@email: forgerui@gmail.com STL中的适配器. ###stl学习 |--迭代 ...

  4. STL学习总结

    STL就是Standard Template Library,标准模板库.这可能是一个历史上最令人兴奋的工具的最无聊的术语.从根本上说,STL是一些"容器"的集合.这些" ...

  5. 【Unity Shader】二、顶点函数(vertex)和片元函数(fragment)传递数据,及各阶段可使用的语义(semantic)

    学习资料:http://www.sikiedu.com/course/37/task/433/show 本节学习目标: 学习Shader中结构体struct的使用. 学习在片元函数(vertex)和顶 ...

  6. 【Unity Shader】一、顶点函数(vertex)和片元函数(fragment)

    学习资料:http://www.sikiedu.com/course/37/task/430/show 学习Shader中顶点函数(vertex)和片元函数(fragment)的基本用法. Shade ...

  7. Shader学习笔记

    Shader学习笔记 例子: Shader "SrfShader1"{ //定义显示在Inspector中的变量,并从Inspector中获取值 Properties{ _Colo ...

  8. 【笔记】MAML-模型无关元学习算法

    目录 论文信息: Finn C, Abbeel P, Levine S. Model-agnostic meta-learning for fast adaptation of deep networ ...

  9. 深度学习面试题03:改进版梯度下降法Adagrad、RMSprop、Momentum、Adam

    目录 Adagrad法 RMSprop法 Momentum法 Adam法 参考资料 发展历史 标准梯度下降法的缺陷 如果学习率选的不恰当会出现以上情况 因此有一些自动调学习率的方法.一般来说,随着迭代 ...

  10. 特征工程学习01-sklearn单机特征工程

    特征工程学习01-sklearn单机特征工程 小书匠 kindle  0.数据的导入 from sklearn.datasets import load_iris  #导入IRIS数据集  iris= ...

随机推荐

  1. B站插入外站链接地址(现已禁用)

    问题描述: B站中插入链接时,无法插入外站链接,提示[请输入正确的站内链接地址]: 日常文章编写中,经常需要插入外站链接跳转,以便于用户快速定位 分析: B站专栏文章编辑使用的富文本编辑器,应该是支持 ...

  2. 有的时候,会遇到DataGrid里面嵌套DataGrid(重叠嵌套),然后里面的鼠标滚轮无法响应外面的滚动,为此记录下解决方案

    有的时候,会遇到DataGrid里面嵌套DataGrid(重叠嵌套),然后里面的鼠标滚轮无法响应外面的滚动,为此记录下解决方案 本实例是在DataGrid的详情行里再嵌入一个DataGrid,模拟重叠 ...

  3. ZBrush2025.1.3 中文版【ZBrush2025版下载】附安装教程

    通过网盘分享的文件:Zbrush软件安装包下载链接: https://pan.baidu.com/s/1BXzRmKUuO1ABpxA124u3mg?pwd=6666 提取码: 6666 ZBrush ...

  4. Kreuzberg:本地OCR+多格式解析!Kreuzberg如何用Python暴力提取30+文档格式?程序员看完直呼内行!

    嗨,大家好,我是小华同学,关注我们获得"最新.最全.最优质"开源项目和高效工作学习方法 我们经常需要从各种不同类型的文档中提取文本内容,无论是办公文档.图像还是PDF文件.而Kre ...

  5. 通过VS地址擦除系统定位缓冲区溢出问题

    VS2019增加了一个名为"地址擦除系统"的功能,默认是关闭的,可以在项目"属性"-"c/c++"-"常规"中开启.在开 ...

  6. RPC实战与核心原理之动态代理了

    动态代理 回顾 用来解决两个应用之间的通信,而网络则是两台l两台机器之间的"桥梁",只有搭好桥梁才能把请求数据从一端传输到另一端,其中关键就是"可靠的传输" 背 ...

  7. B1071 小赌怡情 (15 分)

    描述 常言道"小赌怡情".这是一个很简单的小游戏:首先由计算机给出第一个整数:然后玩家下注赌第二个整数将会比第一个数大还是小:玩家下注 t 个筹码后,计算机给出第二个数.若玩家猜对 ...

  8. C++用Mutex实现读写锁

    近期答辩完成了,想回头看看之前没做过的2PL. 实现2PL有4种方式: 死锁检测.本篇是为了做这个而实现的,做这个事情的原因是c++标准库的shared_mutex无法从外界告知获取锁失败. 如果需要 ...

  9. Java子类上加lombock注解@Data或者@ToString,日志中不包括父类的属性

    问题描述:Java子类上加lombock注解@Data或者@ToString,在翻阅日志的时候,发现不打印父类的属性. 问题分析:@Data在编译时会自动为实体类添加setter.getter和toS ...

  10. maven导入org.apache.pdfbox

    PDF和图片相互转换用到的maven依赖如下: <dependency> <groupId>org.apache.pdfbox</groupId> <arti ...