我的C ++技能有点生锈,可以追溯到C ++ 99,所以我决定花一些时间练习更多进化的元编程。
我正在尝试使用递归模板来实现Vector类。 我发现两种方法:
就C ++中的元编程而言,以一种或另一种方式进行操作是否有任何优势?如果我沿着一条道路或另一条道路走,会有一些陷阱吗?还是在这两种情况下,编译器都能完成几乎相同的工作?
//
// Sample code 1 -- Using inheritance
//
template<unsigned int DIM>
class VectorND : VectorND<DIM-1> {
private:
double _n;
public:
template<class N, class... Rest>
VectorND(N n, Rest... rest): _n(n), VectorND<DIM-1>(rest...) {};
};
template<>
class VectorND<0> {
};
int main() {
VectorND<3> v(1,2,3);
}
//
// Sample code 2 -- Using composition
//
template<unsigned int DIM>
class VectorND {
private:
VectorND<DIM-1> _base;
double _n;
public:
template<class N, class... Rest>
VectorND(N n, Rest... rest): _n(n), _base(rest...) {};
};
template<>
class VectorND<0> {
};
int main() {
VectorND<3> v(1,2,3);
}