在我们等待(希望)传入的概念时,库实现者定义宏是一个好主意吗?这种方法的优点和缺点是什么?
宏的例子(由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
...
Run Code Online (Sandbox Code Playgroud)
示例用法(来自我):
template<ForwardIterator It>
It min_element(It first, It last) { ... }
Run Code Online (Sandbox Code Playgroud)
想法:
长篇故事:亚马逊A9 的A. Stepanov
有几个系列的课程,他使用这些宏来替换教室中实施的算法的模板参数列表中的关键字.由这个"面向指针的程序员"和所有C++库的老大师迷住,我开始在任何地方使用这些宏.最近我被指出宏是丑陋的(而且,迭代器有点过时,但这是另一个故事).所以现在我正在寻找其他专家对这种方法的建议.
typename
所讨论的库的示例:标准库的GPU加速版本(具有高度计算的东西,如数组结构,压缩迭代器等),线性代数库,树状数据结构,新算法函数
一个很大的缺点是你的代码会撒谎.
我更喜欢什么
代码根本不使用概念,但是如果/它们存在,您可以将其更改为将来使用它们.
我不喜欢什么
代码根本不使用概念,但看起来确实如此.无法想象比这更危险的事情.多大的虚假安全感会给维护者带来什么!
无论如何,你的想法都行不通.当概念出现时,您将不可避免地发现您在某个地方犯了一些错误,这些错误可能不会被您的旧编译器诊断出来.您仍然需要更改代码.
现在,只需记录您的类型的前提条件/约束,就像您一直以来一样.