更多精彩内容,请关注微信公众号:后端技术小屋 traits(译作萃取)是C++中一种特殊的编程技法,它是模板元编程最直接的用例之一。通过traits,可以抽取模板入参类型的各种属性。接下来我们通过STL中最常见的几种traits举例说明。 1 __type_traits:trivial判定 __ty ...
分类:
其他好文 时间:
2021-02-26 13:30:23
阅读次数:
0
SFINAE 与 type_traits SFINAE 替换失败不是错误 (Substitution Failure Is Not An Error),此特性被用于模板元编程。 在函数模板的重载决议中应用此规则, 当将模板形参替换为显式指定的类型或推导的类型失败时,从重载集中丢弃这个特化,而非导致编 ...
分类:
其他好文 时间:
2020-02-05 13:52:18
阅读次数:
79
条款可以改为——宁可以编译器替换预处理器,因为 #define 可能不被视为语言的一部分 #define ASPECT_RATIO 1.653 解决之道是以一个常量替换宏(#define) const double AspectRatio = 1.653; 作为语言常量,AspecetRatio 肯 ...
分类:
编程语言 时间:
2018-11-25 16:20:18
阅读次数:
192
在实现invoke之前,我们先看一下标准库种invoke的使用方式 template< class F, class... Args>std::invoke_result_t<F, Args...> invoke(F&& f, Args&&... args) noexcept(/* see belo ...
分类:
编程语言 时间:
2018-11-23 20:39:04
阅读次数:
368
C++模板创造之初只是为了让c++程序员编程更简单,避免书写很多冗余代码,常常和c/c++中的宏做对比,但是在后续发展过程中,模板被证明是图灵完备的,也就是可以做一些元编程,让所谓的“程序”执行变成了由C++编译器来完成,让程序员可以很轻易写出各种DSL特性,交由编译器计算,最终生成非常高效可执行代 ...
分类:
编程语言 时间:
2018-10-11 11:33:49
阅读次数:
188
今天,看C++Template的时候看到那人写了一个Stack,于是乎,手痒,自己也写了一个,在拜读了STD文件和C++模板元编程某些小节之后,你们就看到了这篇代码。 经过上述一番经历之后,我重新写了myVector,使之更完善,更加服务于顶层结构,如:myStack myVector实现 栈没什么 ...
分类:
其他好文 时间:
2018-08-30 11:03:06
阅读次数:
171
C++ template机制自身是一部完整的图灵机(Turing-complete):它可以被用来计算任何可计算的值。于是导出了模板元编程(TMP, template metaprogramming),创造出“在C++编译器内执行并于编译完成时停止执行”的程序。 41:了解隐式接口和编译期多态 所谓 ...
分类:
编程语言 时间:
2018-07-30 11:10:51
阅读次数:
150
1 简介 boost是一个准C++标准库,相当于STL的延续和扩充,它的设计理念和STL比较接近,都是利用泛型让复用达到最大化。 boost主要包含以下几个大类: 字符串及文本处理、容器、迭代器(iterator)、算法、函数对象和高阶编程、泛型编程、 模板元编程、预处理元编程、并发编程、数学相关、 ...
基于模板元编程技术的跨平台C++动态链接载入库。通过模板技术,使用者仅需通过简单的宏,就可以使编译器在编译期自己主动生成载入动态链接库导出符号的代码,无不论什么额外的执行时开销。 extern "C" { typedef int(*Proc_fnTestDll)(); typedef const c ...
分类:
编程语言 时间:
2017-06-03 18:12:42
阅读次数:
193