Reputation: 1243
I'm trying to write a template function that utilizes the length of the array, given just the reference. I know the following code works
template <unsigned S>
void outputArray(int (&a)[S]) {
// S = length of array
}
int main() {
int a[6] = {0};
outputArray(a);
}
I am now attempting to expand upon this by using a dynamically allocated array. I'm pretty sure this isn't possible given that the size of the array in the previous case was determined at compile time, but I could be wrong.
void readFile(int*) {
int a_temp[MAX_DATA]; // MAX_DATA is predefined constant
int length;
// a_temp and length assigned from file
a = new int[length];
memcpy(a, &a_temp, sizeof(int)*length);
}
template <unsigned S>
void outputArray(int (&a)[S]) {}
int main() {
int* a;
readFile(a);
outputArray(a); // This is where my problem lies --- Mismatched types
}
Of course the irrelevant logic is truncated. As you can see in the readFile function, I am reading a variable length array from a file. However, I have no idea how to pass the array to the outputArray function as type int [S]
using the pointer.
I am restricted to using arrays (no C++ vectors) because this is a homework assignment. If there is absolutely no way for me to pass the pointer as a type int [S]
then I will go down the route of simply having the readFile function return the value of the length of the array.
Upvotes: 1
Views: 97
Reputation: 2822
You can't do that.
C-style arrays carry no information about their length, and using C++ type constructs doesn't let you get around that fact. If you want an array that knows its own length, you need to create your own data type, or better, use one of the standard container classes such as std::vector
.
Upvotes: 4