Tag Archives: C++

现代C++神器之variant

看过这两年的Cppcon都应该对variant印象深刻。说起来这个玩意也不算新,2002年就已经有了boost::variant。 说到variant就得提起enum和union。union对非C系编程者可能有点陌生。按照当代角度,enum和union很大一部分作用在于缩减定义域。举例如下: 这里用OneTwoTree限制了相关领域的类型范围,比如说调用foo(4)时编译器就会报错。

Posted in 屠龙之技 | Tagged | Leave a comment

尝试实现《Puyo Puyo》(2)

上一文,我们设计好了数据格式,并且实现了基本操作,游戏初见雏形。本文主要解决两个问题:随机方块颜色和连锁消除。

Posted in 玩具们 | Tagged , | Leave a comment

尝试实现《Puyo Puyo》(1)

Puyo Puyo(魔法气泡)可能是我最喜欢的消除类游戏。规则很简单,超过四个方块连起来就会消除。如果结构设计良好,就会引发连锁反应。 右边的结构,左下角黄色块引爆(就是消除,我习惯用引爆)之后,接着会引爆蓝色,接着引爆红色,蓝,红,绿,黄,蓝,红。左边的结构类似,当黄色块落下时会引爆11次,俗称11连锁。对我来说,这个游戏的乐趣就在于尽可能设计连锁最多的结构。

Posted in 玩具们 | Tagged , | Leave a comment

现代C++神器之comma operator

comma operator也就是逗号。常见的用法不过是以下几种: 这能有什么独特技巧?接着探索: 第三行已经有点模糊,展开会比较清晰: 重点来了,第四行会发生什么?

Posted in 屠龙之技 | Tagged | Leave a comment

C++之无聊小技巧三.1

上文讨论了一工厂和访问者,为了贯彻娱乐精神,我们接下来组合这两个机制,看能搞出什么花样? 使用的时候是这样: 哈哈,是不是有一种想打人的冲动?这也正体现本文的关键字——无聊。

Posted in 杂物间 | Tagged | Leave a comment

现代C++神器之literals

Modern C++有很多理念极具启发性。我个人很欣赏std::chrono::duration的设计,比如说它的构造方式: 上面几种都是普通的初始化,后两个会转换不同格式的数据。但是呢: 这又是什么?为什么编译通过?那两个后缀竟然合法?不仅如此: 这两个也是合法的。

Posted in 屠龙之技 | Tagged , , | 19 Comments

C++之无聊小技巧三

上一篇扯了一点设计模式,本文接着讨论。以下内容仅供娱乐。 先看一个朴实的例子:

Posted in 杂物间 | Tagged , | Leave a comment

C++之无聊小技巧二

接下来扯一点设计模式。一般的业务框架会包含大量的模板方法模式,它的目的主要是为了复用代码。看个简单例子:

Posted in 杂物间 | Tagged , , | Leave a comment

C++之无聊小技巧

通用编程语言的基本特性都相差不远,同时也各有各的玩法。C++特性之多首屈一指,各种其他语言看不到的玩法,当然其实用性也有限。本文简单探讨一些无聊并有趣的技巧,特性或者Idiom。演示这些的目的在娱乐,并不建议在工程中使用。 诊断 C语言本身就有assert(),不过没有输出信息。C++11又加上static_assert(),支持输出信息。 在这之前可以自己实现带输出的诊断: 或者这样:

Posted in 杂物间 | Tagged , | Leave a comment

吃饱了撑的之实现drop函数?

本篇的灵感如题来自一个常见的函数drop(),他的用法是这样的: 它在函数式或者动态语言里非常常见。一般实现是这样: 这里借助了tail()。如果用Python或者Go就是xs[1:](尾递归优化不在探讨范围)。

Posted in 无用心得 | Tagged | 107 Comments