zmatt icon

C declarations ♥

zmatt | PRO | 04/03/20 04:05:57 PM UTC | 0 ⭐ | 495 👁️ | Never ⏰ | []
C++ |

350 B

|

None

|

0 👍

/

0 👎

// cast 2d to 1d array
template< size_t n, typename T >
T *flatten( T x[][n] ) {  return (T *) x;  }
 
// cast 1d to 2d array
template< size_t n, typename T >
T (*unflatten( T x[] ))[n] {  return (T (*)[n]) x;  }
// (yes, I could have used auto as return type here, but I wanted to give
// you the opportunity to reflect on this syntax for a bit.)
 
 
 
 
// .... note that C++ isn't to blame for this horror, you can just instantiate
// it for T=float and n=2 to get the same beautiful declaration for unflatten:
float (*unflatten( float x[] ))[2] {  return (float (*)[2]) x;  }

Comments