I use the following template to obtain a pointer pointing after the last element of an array:
template
T* end_of(T (&array)[n])
{
return array + n;
}
Now I seem to remember that there was some problem with this approach, but I cannot remember what it was. I believe it had something to with the choice of the type parameters or function parameters, but I'm not sure. So just as a sanity check, do you see any problems with the above code? Small usage test:
int test[] = {11, 19, 5, 17, 7, 3, 13, 2};
std::sort(test, end_of(test));
Answer
Your proposal is not necessarily evaluated at compile time, it depends on optimisation. The following is calculated at compile time:
template char (&array(T(&)[N]))[N];
int main()
{
int myArray[10];
std::cout << sizeof array(myArray) << std::endl;
return 0;
}
It works by creating an array type of char which is the same number of elements as the given array. sizeof always returns size in number of chars.
No comments:
Post a Comment