07/05/09 02:47:13
テンプレート使ってやってみました
漏れの知識の程度じゃ読みにくくなるだけしたまる
#include <stdio.h>
#include <numeric>
#define ARRAY_SIZE(X) (sizeof(X)/(sizeof(X[0])))
#define INNER_PRODUCT(x,y) ( g( (x),(y), ( f((x),(y)) ) ) )
template <class T> size_t f(const T& a, const T& b) {
size_t len=0;
len = (ARRAY_SIZE(a));
if (len != ARRAY_SIZE(b)) {
puts("can not define inner product of these vectors");
return -1;
}
else
return len;
}
float g(const float a[], const float b[], size_t len) {
if (len == -1)
return 0;
float ip(0);
for (size_t i = 0; i <len; ++i)
ip += a[i]*b[i];
return ip;
}
int main (void){
float v1[3]={1.3f,0,1}; float v2[3]={2,3,4};
printf("out of function: %d,%d\n", sizeof(v1), sizeof(v1[0]));
printf("%f\n", INNER_PRODUCT(v1,v2) ) ;
return 0;
}