power(C++ - {templates}) = power(C++)?
power(C++ - {templates}) = power(C++)?
我想知道是否可以在不使用模板的情况下用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++)程序在源代码中包含特殊的工具,这些工具在构建阶段用于从一些"预源代码"模板生成一些源代码。
- 等效的Windows API与Power shell get-physicaldisk命令
- 计算"power of 2"数字使用的功率的最快方法?
- Recursion with power of
- power(C++ - {templates}) = power(C++)?
- 来自wiki的pow(power)模板实现
- Cache预取场景- power架构
- c++ power of integer,模板元编程
- c++ coding for power-pc
- 从c++代码控制不同的应用程序(Adobe Reader,Word,Windows Media Player,Power
- c++中的Power变量
- Mod power或totient逻辑问题