我想知道是否可以在不使用模板的情况下在C ++中进行泛型编程。是否可以编写C ++中可用的所有库,这些库是使用模板编写的,而不使用模板。 C ++中是否有可用于模板的替代方法?
我想知道是否可以使用为我提供相同功能的模板编写用C ++编写的库的抽象
答案 0 :(得分:2)
理论上,没有模板的C ++仍然是图灵完备的,因此您可以为该语言中的每个函数编写一个程序,也可以使用模板用C ++编写。据我所知,C ++中的宏预处理器不是Turing-complete,而是模板。因此必须存在可以纯粹作为模板实现的功能,但不能用宏实现。
实际上,我不认为可以用相同的语义重新实现所有内容。如果没有模板,你可能不得不牺牲类型安全性并坚持使用宏,startIndex_loc
或基于继承的方法,就像早期的Java类甚至对简单的容器库一样。
对于更高级的元编程库,例如表达模板,维度分析框架,Boost.Spirit Boost.Proto,我怀疑它们可以在没有其他形式的元编程的情况下实现。宏可能会工作,但这更像是一个代码生成器,并推迟对编译器的类型检查,错误消息将比我们现在使用的模板更糟糕。另外,语义是不同的w.r.t参数传递。
答案 1 :(得分:1)
嗯,模板只是 - templates 。它们是实际类型和功能的蓝图。因此,理论上,您可以手动完成所有这些模板实例化。但那不再是通用编程。
答案 2 :(得分:1)
回答问题:
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 ++)程序在源代码中包含了一些特殊工具,这些工具在构建阶段用于从某些“presource”模板生成一些源。