当前位置:  开发笔记 > 编程语言 > 正文

#define作为缺少概念的解决方法

如何解决《#define作为缺少概念的解决方法》经验,为你挑选了1个好方法。

在我们等待(希望)传入的概念时,库实现者定义宏是一个好主意吗?这种方法的优点和缺点是什么?

宏的例子(由A. Stepanov提供):

#define TotallyOrdered typename
#define Pointer typename
#define Number typename
#define Unsigned typename
#define Integral typename
#define InputIterator typename
#define OutputIterator typename
#define ForwardIterator typename
#define BidirectionalIterator typename
#define RandomAccessIterator typename
...

示例用法(来自我):

template
It min_element(It first, It last) { ... }

想法:

虽然没有概念,但这是一个简单的旧模板代码

当概念最终到达时,您可以删除所有宏或重命名它们,如果概念名称不同(您可以在任何体面的IDE中轻松完成)然后删除或只是将这些宏重新实现为概念表达式

利用未来的功能而无需重写复杂的模板化代码

即使是现在,"类型化"模板参数也可以更好地理解代码,并为开发静态概念检查工具提供了可能性

长篇故事:亚马逊A9 的A. Stepanov 有几个系列的课程,他使用这些宏来替换教室中实施的算法的模板参数列表中的关键字.由这个"面向指针的程序员"和所有C++库的老大师迷住,我开始在任何地方使用这些宏.最近我被指出宏是丑陋的(而且,迭代器有点过时,但这是另一个故事).所以现在我正在寻找其他专家对这种方法的建议. typename

所讨论的库的示例:标准库的GPU加速版本(具有高度计算的东西,如数组结构,压缩迭代器等),线性代数库,树状数据结构,新算法函数



1> Lightness Ra..:

一个很大的缺点是你的代码会撒谎.


我更喜欢什么

代码根本不使用概念,但是如果/它们存在,您可以将其更改为将来使用它们.

我不喜欢什么

代码根本不使用概念,但看起来确实如此.无法想象比这更危险的事情.多大的虚假安全感会给维护者带来什么!


无论如何,你的想法都行不通.当概念出现时,您将不可避免地发现您在某个地方犯了一些错误,这些错误可能不会被您的旧编译器诊断出来.您仍然需要更改代码.

现在,只需记录您的类型的前提条件/约束,就像您一直以来一样.

推荐阅读
jerry613
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有