Table of Contents

1. 也许concept能比SFINAE好的一些个人思考-从一些很有趣的哲学角度上出发

再三声明: 我不会cpp,我不会cpp,我不会cpp

如果从哲学上的(类型系统)的角度去看的话,那么我个人的理解是

从哲学上的角度去看哈!我这里不谈语言技术的

我只想说一说这些语言技术,它对应着什么样的形而上学的内容

也或者说从暴论角度上去看一看这种技术是什么原因实现出来的

2. TLDR

与SFINAE相比,concept生在 能组合

2.1. SFINAE

很多零散的特化,每一棵类型树的距离也贼远。

为了全部能概括上,所以这要求编写者要写出 非常相当具体 的case代码 (且每种case,在出现concept之前,是不能合并起来的),来尽量保证 "尽量跳过,也不要出错"

这要求编写者要见多识广

(暴论)如果我想买饼干、榴莲、CPU、耳机、购物袋子,那么我这么说的话,是不是很麻烦?

  • 去零食店买饼干
  • 去水果店买榴莲
  • 去电子数码专卖店买CPU
  • 去耳机店买耳机
  • 去商场买个购物袋

是不是很麻烦?是不是很麻烦?

如果说 “是” 的话,相信你已经也基本明白 SFINAE 的繁琐之处了。

2.2. concept

关于 concept 的意思,想看八股的可以去看 cppreference (毕竟我当时也是从这个网站上了解到的)

它也是有一套哲学系统在里面的,即使不写代码的话

不久之前与chatGPT 4o聊了会天,在关于cpp为啥如此形而上的话题上,它说可能是以下方面导致的

  • 兼容旧语言的历史负担(在兼容C与不兼容C之间反复横跳,导致一方面又像C,另一方面又与C根本没有无关)
  • 多范式融合导致语义复杂(面向引用编程,面向泛型编程,面向模板元编程编程,面向xxx编程)
  • 没有内建抽象机制,必须自己手动“搭积木”(参考concept的出现,就像是极限竞速地平线5,官方不会做或不想做蓝图,于是要用户自己做蓝图,来 “充实” 游戏内容)
  • 社群文化本身偏哲学(language lawyer多得一批,都喜欢讨论某个设计背后的哲学,就像这篇文章的暴论一样。每个提案都喜欢说 “这个特性是否符合C++精神”)
  • 类型系统强大但隐性(我个人的理解是,模板太逆天了,一个这样的概念却弄出了无数多的语法、概念、术语,以至于必须要借助哲学上的技巧经验,才能比较短时间内(我的建议是,大概是一年)记住它的各种变法用法)

好啦好啦,这里回到正题

之前说过,SFINAE的哲学上是

SFINAE

很多零散的特化,每一棵类型树的距离也贼远。

为了全部能概括上,所以这要求编写者要写出 非常相当具体 的case代码 (且每种case,在出现concept之前,是不能合并起来的),来尽量保证 "尽量跳过,也不要出错"

那么现在的concept的哲学是

concept

很多零散的特化,每一棵类型树的距离也贼远。

但每种这么零散、距离也贼远的case,可以自行组合,可以自行合并升级成一个新的概念

比如饼干与榴莲,如果给SFINAE的话,它需要又去零食店又去水果店是吧?

零食店,水果店,这两个名词概念,好像完全就不搭边是吧?(请只看 “零食店”“水果店” 个词)

而且要买到饼干与榴莲的话,还需要去对应的零食店、对应的水果店去买

这就导致要实现买到饼干与买到榴莲,就需要走很多路,反正有可能是零食店在西边,榴莲店在东边,反正就需要一些策略才能管理上吧,心智负担很大的,要考虑很多最优解

但是 如果我们将它们组合起来呢?我们将 [饼干] 与 [榴莲] 组成胖东来这样的 [大型超市]

那么 是不是我们就能直接全部买到了,而不用去西边的零食店,东边的榴莲店了呢?

有人现在会直接反驳说:啊,那你怎么敢笃定,你家去到胖东来,与你家到西边零食店与东边水果店,要花费的路程更少?我家又不在河南,那肯定是去胖东来距离远啊!

我想说的是: 对啊,所以现在要你自己如何组合concept啊,你自己如何组合这些concept 决定了最后究竟是 “华强北小卖部” 还是 “大型商超CBD” 啊。这些都是要看 你自己如何组合出来的

比如说,我可以有比较像人的思考方式的组合,比如说 "CPU + 耳机"、比如说 "饼干 + 榴莲",比如说 "饼干 + 榴莲" 这些组合

但我也可以比如说,我可以有不像人的思考方式的组合,比如说 "饼干 + 耳机",比如说 "榴莲 + CPU" 这些组合

  • 啊好,比如,可以用 “CPU + 耳机” 的方式去组合成一个 "卖CPU又卖耳机的华强北专卖店" 这样的新concept,而不单单只是单纯的电子数码店与单纯的耳机店
  • 啊好,比如,可以用 “饼干 + 榴莲” 的方式去组合成一个 "卖饼干又提供购物袋的零食店" 这样的新concept,而不单单只是单纯的零食店与水果店
  • 啊好,比如说,可以用 “饼干 + 购物袋” 的方式去组合成一个 "卖饼干又提供购物袋的零食店" 这样的新concept,而不单单只是单纯的、不提供袋子的零食店
  • 啊好,比如说,可以用 “饼干 + 耳机” 的方式去组合成一个 "卖饼干又卖耳机的店铺" 这样的新concept (如果谁真的想到了这样的创业机会并落地实现的话,那就太不可思议了)
  • 啊好,比如说,可以用 “榴莲 + CPU” 的方式去组合成一个 "卖榴莲又卖CPU的店铺" 这样的新concept (如果谁真的想到了这样的创业机会并落地实现的话,那就太不可思议了)

这些不同的店铺,完全可以开在你家附近的商圈里啊,只要能要你用最方便的方式去完成购买需求,得到最优解才是正确的啊。

反正这要看你自己如何组合这些零散、距离贼远的具体case情况,组合成concept新概念一样,然后放在适当的地方这样咯

哎呀,反正就是组合成,当前对你家附近的商圈,能用最方便的方式买到这些东西的 最优解 才是正确的啊。

那回过头来,再说一遍SFINAE与concept

SFINAE

很多零散的特化,每一棵类型树的距离也贼远。

为了全部能概括上,所以这要求编写者要写出 非常相当具体 的case代码 (且每种case,在出现concept之前,是不能合并起来的),来尽量保证 "尽量跳过,也不要出错"

这要求编写者要见多识广

concept

很多零散的特化,每一棵类型树的距离也贼远。

但每种这么零散、距离也贼远的case,可以自行组合,可以自行合并升级成一个新的概念

也许concept能比SFINAE好的一些个人思考,从一些很有趣的哲学角度上出发。

Author: kle

Created: 2025-06-15 Sun 10:12

Validate