/////// Treating arbitrary data types /////// #include typedef int (* END_FN)(void *, int); arblen(void *any, END_FN is_end) { int len=0; while ( ! is_end(any,len) ) len++; return(len); } int int_end(int *a, int i) { return( a[i] == -1 ); } int str_end(char *a, int i) { return( a[i] == '\0' ); } int main() { char a[]="abcdefg"; int b[]={0,1,2,3,4,-1}; int i; void * foo; i = arblen(a, END_FN(str_end) ); // length 7 cout << "length of string = " << i << endl; i = arblen(b, END_FN(int_end) ); // length 5 cout << "length of int array = " << i << endl; return(0); }