J Woltman J Woltman - 1 month ago 19
C++ Question

Is it Possible to Use Casting as "array slicing" in C++11

I have some shared memory populated by specialized hardware. It's declared as an array of structs, like

int bus[10]port[5]data[10]
. I'm (re)learning C++, and wanted to use C++11's ranged for loops to iterate over the data.

HOWEVER: That last dimension of the array (
data[10]
), I only care about the first 4 elements. Is there a way to take a slice of the data and use it in the for() statement?

Like

for (auto & b : bus) {
for (auto & p : bus.port) {
for (auto & d : port.data[0 through 3]) {
store_the_address_of_d_for_use_elsewhere(d);
}
}
}


Is there a way to use a cast in the innermost for loop, so that it appears like there's only 4 elements? The address of the data is important because I'm going to refer directly to it later using pointers.

Answer

This is probably one of those times when a good old-fashioned for (int i = 0; i < 4; i++) is your best bet.

Don't overthink it, and don't try to use "new" features just for the sake of it, creating more complexity and more work in the process.