模板全特化与偏特化的概念_miseryjerry-编程思维

前言 之前我在学习STL的时候,发现STL用到了大量的类模板、函数模板。对于模板而言,我们知道,当用户传递类型后,模板会进行自动类型推演,但是作为一个模板初学者,我有时候并不能确定模板一定会按照我的思路去推导出符合我预期的类型,所以有时候编写的模板能够涵盖的类型过多反而也不是一件好事(如果代码出现错误,很难察觉到),那么为了让编译器更加精准了解我们想要的类型,我们就可以对模板进行特化(特例化),

javascript 元编程初探 [1] - 编程思维

引子 元编程会有如下的定义: 一种计算机程序的编写方式,它可以将其它程序(或者其本身)作为数据进行编写和操作,或者在编译时做一部分工作,在运行的时候做另外一部分工作。 在这里讲到的很多也许只和程序对于工作机制的操作有关,但是作为初探也许也就足够了。 鉴于我也是边学边写的这篇文章,如果有谬误之处,还请指出。 创建带有默认参数的函数 function repeat(func, times)

vue框架typescript装饰器使用指南 - 编程思维

关键词 装饰器 Decorator 元编程 前言 装饰器是一种特殊类型的声明,它能够被附加到类声明,方法, 访问符,属性或参数上。 装饰器使用 @expression这种形式,expression求值后必须为一个函数,它会在运行时被调用,被装饰的声明信息做为参数传入。 本篇先从项目的宏观角度来总结一下Decorator如何组织。 我会持续分享一些知识整理,如果文章对您有帮助记得点赞鼓励一下哦😁~

javascript dsl示例 - 编程思维

DSL(domain-specific languages)即领域特定语言,唯一能够确定DSL边界的方法是考虑“一门语言的一种特定用法”和“该语言的设计者或使用者的意图。在试图设计一个DSL的时候,发现了一些有意思的简单的示例。 jQuery 最流行的DSL jQuery是一个Internal DSL的典型的例子。它是在一门现成语言内实现针对领域问题的描述。 $('.mydiv').add

y分钟学clojure宏 - 编程思维

和所有Lisp一样,Clojure内在的同构性使得你可以穷尽语言的特性,编写生成代码的子过程——“宏”。宏是一种按需调制语言的强大方式。 小心!可以用函数完成的事用宏去实现可不是什么好事。你应该仅在需要控制参数是否或者何时eval的时候使用宏。 你应该熟悉Clojure.确保你了解Y分钟学Clojure中的所有内容。 使用defmacro定义宏。宏应该输出一个可以作为clojure代码演算

c++模板技法收录 - 编程思维

C++ 模板技法 C++模板的学习,一来就是Trick太多,二来是规则太复杂而且资料少。我希望在这里总结一下,方便学习。这些C++特性可能只能在比较新的编译器上才能正确编译。下面的代码也都只是Demo,万不能在生产环境中使用。应用在生产环境中时,你还要考虑到const的增减、右值引用以优化性能、访问控制以增强封装等等。 此文不定期更新。若这些代码在你的编译器上无法编译成功,请及时告知。 一、ty

技术解析丨c++元编程之parser combinator - 编程思维

摘要:借助C++的constexpr能力,可以轻而易举的构造Parser Combinator,对用户定义的字符串(User defined literal)释放了巨大的潜力。引子前不久在CppCon上看到一个Talk:constexpr All the things,这个演讲技术令我非常震惊,在编译期解析json字符串,进而提出了编译期构造正则表达式(编译期构建FSM),现场掌声一片,而背后依靠

scala元编程:实现lombok.data - 编程思维

如果你读完了《Scala元编程:伊甸园初窥》,理论上你已经具备实现lombok.Data的能力了。 所以,我建议你不要阅读本文,直接自己尝试。 定义lombok.Data的 Scala 版 @data class A { var x: Int = _ var y: String = _ } 我们希望通过@data这个注解,自动生成如下代码: class A { var x: Int

使用 scala 宏解决对象转换 - 编程思维

背景在 GrowingIO 服务端的开发中,我们使用 gRPC 进行微服务之间的数据通信,每个提供服务的项目,都要定义一套自己的 Protobuf 消息格式,然后利用 protoc 去生成对应语言的适配代码。在我们维护的项目中,主要使用 Scala 语言来实现各个服务,每个服务都会定义一套自己的领域模型(一般是一些 case class),而 protoc 默认生成的 JVM 平台的代码是 Jav

lua 学习笔记(上) - 编程思维

1 简介 由 clean C 实现。需要被宿主程序调用,可以注入 C 函数。 2 语法 采用基于 BNF 的语法规则。 2.1 语法约定 Lua 对大小写敏感。 2.1.1 保留关键字 C 语言中没有的关键字有: and elseif functionin nil local not orrepeat then until 规范:全局变量以下划线开头。 2

lua 学习笔记(四)—— 元表与元方法 - 编程思维

我们可以使用操作符对 Lua 的值进行运算,例如对数值类型的值进行加减乘除的运算操作以及对字符串的连接、取长操作等(在 Lua 学习笔记(三)—— 表达式 中介绍了许多类似的运算)。元表正是定义这些操作行为的地方。 元表本质上是一个普通 Lua 表。元表中的键用来指定操作,称为“事件名”;元表中键所关联的值称为“元方法”,定义操作的行为。 1 事件名与元方法 仅表(table)类型值对应的

干货丨dolphindb元编程教程 - 编程思维

元编程是指使用程序代码来生成可以动态运行的程序代码。元编程的目的一般是延迟执行代码或动态创建代码。DolphinDB实现元编程的方法DolphinDB支持使用元编程来动态创建表达式,包括函数调用的表达式、SQL查询表达式等。DolphinDB有两种实现元编程的方法:(1)使用一对尖括号<>来表示需要延迟执行的动态代码。例如,a = <1 + 2 * 3> typestr(a

理解ruby中的类 - 编程思维

live with scope 序言 源起于Python开发者'公众号转载的深刻理解Python中的元类一文, 回忆着自己看过的 Ruby元编程 一书, 参照写个相应的Ruby版. Python和Ruby在很多方面都非常相像, 特别是Ruby的设计部分参考了Python. 但在很多方面, 它俩的很多概念并非一一对应的. 在这里的 元类 在Ruby 中并没有相应的概念, 如果理解为创建类的类, 最

typescript 随想 · 实际应用与技巧 - 编程思维

目录类型元编程内置工具类型窥探外部工具类型推荐新操作符声明文件类型元编程什么是元编程:维基百科是这样描述的:元编程是一种编程技术,编写出来的计算机程序能够将其他程序作为数据来处理。意味着可以编写出这样的程序:它能够读取、生成、分析或者转换其它程序,甚至在运行时修改程序自身。在某些情况下,这使程序员可以最大限度地减少表达解决方案的代码行数,从而减少开发时间。它还允许程序更灵活有效地处理新情况而无需重