c++ gcc stdarray

¿Puede C++ generar un error cuando la inicialización de la matriz estándar es demasiado pequeña?



gcc stdarray (3)

Supongamos que tengo una serie de:

std::array<int, 6> {4,3,2};

¿Es posible generar un error o advertencia cuando este es el caso? En algunos casos, puede ser útil tener esta coincidencia explícita.


En lugar de escribir su propio método createArray, puede usar std::make_array

si tu compilador lo admite.

#include <experimental/array> int main() { std::array<int,5> arr1= std::experimental::make_array(1, 2, 3, 4, 5); // ok std::array<int,3> arr2= std::experimental::make_array(1, 2, 3, 4, 5); // fails std::array<int,6> arr3= std::experimental::make_array(1, 2, 3, 4, 5); // fails }

Pero todos pueden iniciar directamente la matriz a través del constructor. Por lo tanto, no hay garantía para su base de código si no verifica (automáticamente) contra algunas pautas de codificación.


Puede crear su propia capa de abstracción que se queja cuando no pasa exactamente el mismo número de argumentos para la inicialización.

template <std::size_t N, class ...Args> auto createArray(Args&&... values) { static_assert(sizeof...(values) == N); using First = std::tuple_element_t<0, std::tuple<Args...>>; return std::array<First, N>{values...}; }

Para ser invocado como

auto ok = createArray<6>(4, 3, 2, 1, 0, -1); auto notOk = createArray<6>(4, 3, 2};


Puede usar std::make_array o algo similar para hacer que los tipos difieran

std::array<int, 6> = std::make_array(4,3,2);

da este error en gcc:

<source>:30:53: error: conversion from ''array<[...],3>'' to non-scalar type ''array<[...],6>'' requested