Transmissão adequada para funções de membro de leitura e gravação fstream

Embora tenha havido muitas linhas escritas sobre o tópico reinterpret_cast, e quão ruim é, ainda estou intrigado com a melhor maneira de evitá-lo, especialmente ao lidar com funções como leitura e gravação do fstream. Então, aqui está o meu dilema ...

Digamos que temos uma matriz inteira que queremos preencher com alguns dados de um arquivo.

std::ifstream iFile( ... );

// presume that the type of this array is not a matter of choice
int *a = new int[ 100 ]; 

Podemos ler com alguns modelos diferentes:

iFile.read( (char *)a, sizeof( int ) * 100 );
iFile.read( reinterpret_cast< char * >( a ), sizeof( int ) * 100 );
iFile.read( static_cast< char * >( static_cast< void * >( ( a ) ), sizeof( int ) * 100 );

O primeiro (estilo C) está desatualizado e o novo estilo é introduzido no C ++ por boas razões. O segundo não é portável e não oferece garantias. O terceiro é tedioso para escrever e estraga a diversão.

Existe alguma alternativa para isso e como devo proceder?

EDITAR:

O objetivo é obter o código o mais portátil e em conformidade com o padrão possível.

questionAnswers(1)

yourAnswerToTheQuestion