c++中的多态主要体现在模板与继承上。
继承可以理解为有相互关系的不同数据结构的集合。 而模板则是完全独立的数据结构,彼此无需依赖
在函数中使用模板, 可以根据函数传入的参数自动推导类型,从而省略到很多重复的代码
比如,一个求和的函数
template<typename T> T add(T a, T b) { return a + b; }
这是最简单的模板使用方法。 假设现在要实现一个函数, 传入一个结构体, 打印出结构体的所有变量。由于c++没有反射机制, 所以在模板函数中,没办法判断变量的类型, 也就没办法知道结构体变量有哪些成员
解决办法
template<typename T> void visit(T a) { return; }
template<> void visit(A a) { // 打印成员 return; }
template<> void visit(B a) { // 打印成员 return; }
首先定义一个模板函数, 然后针对每一个具体的结构体变量, 实现一个函数。