Struct hackear equivalente en C ++

La estructura donde se tiene una serie de longitud 0 como el último miembro de una estructura de C90 y C99 es bien conocida, y con la introducción de miembros de matriz flexible en C99, incluso tenemos una forma estandarizada de usarla con[]. Desafortunadamente, C ++ no proporciona tal construcción, y (al menos con Clang3.4), compilando una estructura con cualquiera[0] o[] dará una advertencia de compilación con--std=c++11 -pedantic:

$ cat test.cpp 
struct hack {
  char filler;
  int things[0];
};
$ clang++ --std=c++11 -pedantic test.cpp
\test.cpp:3:14: warning: zero size arrays are an extension [-Wzero-length-array]
  int things[0];

y de manera similar

$ cat test.cpp 
struct fam {
  char filler;
  int things[];
};
$ clang++ --std=c++11 -pedantic test.cpp
\test.cpp:3:7: warning: flexible array members are a C99 feature [-Wc99-extensions]
  int things[];

Mi pregunta entonces es esta; diga que quiero tener una estructura que contenga una matriz de tamaño variable como el último elemento en C ++. ¿Qué es lo correcto para hacer dado un compilador que soporta ambos? ¿Debo ir con la estructura hackear?[0] (que es una extensión del compilador), o la FAM[] (que es una característica de C99)? Por lo que yo entiendo, cualquiera de los dos funcionará, pero estoy tratando de averiguar cuál es el mal menor.

Además, antes de que las personas empiecen a sugerirint* a una parte de memoria asignada por separado en la estructura en su lugar, eso no es una respuesta satisfactoria. Quiero asignar una sola pieza de memoria para contener tanto mi estructura como los elementos de la matriz. Usar un std :: vector también cae en la misma categoría. Si se pregunta por qué no quiero usar un puntero, elLa respuesta de R. A otra pregunta da una buena visión general.

Ha habido algunas preguntas similares en otros lugares, pero ninguna da una respuesta a esta pregunta en particular:

¿Los miembros de la matriz flexible son válidos en C ++?: Muy similar, pero la pregunta es si FAM es válido en C ++ (no). Estoy buscando una buena razón para elegir uno o el otro.Variante conforme a la antigua "estructura hack": Propone una alternativa, pero no es bonita ni siempre es correcta (¿qué ocurre si se agrega relleno a la estructura?). Acceder a los elementos más tarde tampoco es tan limpio como hacere.things[42].

Respuestas a la pregunta(6)

Su respuesta a la pregunta