ch7.7templatemeta.cc
来自「C++ source code for book-C++ and Object 」· CC 代码 · 共 47 行
CC
47 行
// template metaprogram
#include <iostream>
template<int N, class T>
class smallVtr {
T vr[N]; // array of size N and type T
public:
T& operator[](int i) { return vr[i]; }
};
template<int M> struct metaDot {
template<int N, class T>
static T f(smallVtr<N,T>& u, smallVtr<N,T>& v) {
return u[M-1]*v[M-1] + metaDot<M - 1>::f(u,v);
}
};
template<> struct metaDot<1> {
template<int N, class T>
static T f(smallVtr<N,T>& u, smallVtr<N,T>& v) {
return u[0]*v[0];
}
};
template<int N, class T>
inline T dot(smallVtr<N,T>& u, smallVtr<N,T>& v) {
return metaDot<N>::f(u,v);
}
int main() {
smallVtr<4, float> u, v;
for (int i = 0; i < 4; i++) {
u[i] = i + 1;
v[i] = (i + 2)/3.0;
}
double d = dot(u,v);
std::cout << " dot = " << d << '\n';
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?