power(C++ - {templates}) = power(C++)?

power(C++ - {templates}) = power(C++)?

本文关键字:power C++ templates      更新时间:2023-10-16

我想知道是否可以在不使用模板的情况下用C++进行通用编程。是否可以编写C++中所有可用的库,这些库是使用模板编写的,而不使用模板。C++中是否有模板的替代方案?

我想知道是否可以使用模板在用C++编写的库上编写抽象,这些模板为我提供了相同的功能

理论上,没有模板的C++仍然是图灵完备的,所以你可以用该语言为每个函数编写一个程序,也可以用有模板的C++编写。据我所知,C++中的宏预处理器不是图灵完备的,但模板是。因此,必须存在可以纯粹作为模板来实现的函数,但不能用宏来实现。

实际上,我认为不可能用相同的语义重新实现所有东西。如果没有模板,您可能不得不牺牲类型安全性,并坚持使用宏、void*或基于继承的方法,就像早期的Java类那样,甚至对于简单的容器库也是如此。

对于更高级的元编程库,例如表达式模板、维度分析框架、BoostSpirit Boost.Proto,我怀疑它们是否可以在没有其他形式的元编程的情况下实现。宏可能会工作,但这更像是一个代码生成器,并将类型检查推迟到编译器,错误消息将比我们现在使用的模板更糟糕。此外,w.r.t参数传递的语义也不同。

好吧,模板就是--模板。它们是实际类型和功能的蓝图。因此,从理论上讲,您可以手工进行所有这些模板实例化。但这将不再是通用编程。

问题答案:

C++中是否有模板的替代方案?

宏是模板的替代品。(不是好的替代方案,而是替代方案)相关链接[1],[2]

比较:

#define min(i, j) (((i) < (j)) ? (i) : (j))
template<class T> T min (T i, T j) { return ((i < j) ? i : j) }

宏观问题:

  • 没有类型检查
  • 不太容易理解的编译器错误变成宏扩展
  • 多个计算表达式的副作用

关于问题:

是否可以编写C++中所有可用的库,这些库是使用模板编写的,而不使用模板。

在某些情况下可以使用宏观。可以为每种库类型编写或生成实现。但对于用户定义的类型库,除了宏可能有用的简单情况外,不能有实现。早期的纯C(而不是C++)程序在源代码中包含特殊的工具,这些工具在构建阶段用于从一些"预源代码"模板生成一些源代码。