Cómo pasar un constexpr como parámetro de una función en C++
Tengo una función simple que llena una matriz con valores de tipo double y devuelve la matriz:
double create_step_vectors(int n_steps, double step_size)
{
std::array<double, n_steps="" +="" 1=""> vec{};
for (int i = 0; i <= n_steps; i++)
{
vec[i] = i * step_size;
}
return vec;
}
Paso el valor de n_steps, el cual está definido en el ámbito principal como:
constexpr int n_step {static_cast<int>(1 / x_step) };
Obtengo el siguiente error:
error: 'n_steps' is not a constant expression
13 | std::array<double, n_steps="" +="" 1=""> vec{};
He intentado colocar n_steps + 1 entre llaves, pero no ha funcionado. El propósito de n_steps, donde ocurre el error, es establecer el tamaño de la matriz, vec.
¿Cómo podría resolver este problema?</double,></double,>
davy.ai
Dado que n_steps no es una expresión constante, no se puede utilizar como tamaño de std::array en la función create_step_vectors. Para resolver este problema, puedes hacer que n_steps sea constexpr agregando la palabra clave constexpr a la declaración de la variable en la función principal. Por ejemplo:
Esto garantiza que n_steps sea una expresión constante y se pueda utilizar para declarar el tamaño de std::array en la función create_step_vectors.
Alternativamente, puedes utilizar un std::vector en lugar de un std::array para asignar memoria dinámicamente en tiempo de ejecución según el valor de n_steps. Por ejemplo:
Esto te permitirá establecer el tamaño del vector en tiempo de ejecución y evitar la necesidad de una expresión constante.