Bonjour,

Je continue dans la joie et la bonne humeur à découvrir le C++ et je m'attaque un morceau qui me donne bien du fil à détordre. J'espère que vous allez rallumer ma lanterne.

Codant dans un environnement embarqué contraint, je dois éviter autant que possible l'allocation dynamique. Je trompe peut-être mais cela implique de se passer de std::vector. J'ai souhaité me tourner vers std::array mais hélas je n'ai pas droit à C++11 (oui je cumule...). J'ai donc tenté de coder un ersatz pour avoir un tableau à allocation sans dynamique sur lequel je pourrais avoir quelques méthodes un peu cool. Ma 1ère idée a donc été de faire quelque chose comme ça :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#ifndef ARRAY_H
#define ARRAY_H
 
#include <assert.h>
#include <cstddef>
 
template<typename __type, std::size_t __size>
struct array
{
public:
    __type& operator[](std::size_t index)
    {
        assert(index >= 0 && index < __size && "Index is out of bounds!");
        return __private_data[index];
    }
 
    std::size_t size()
    {
        return __size;
    }
 
private:
    __type __private_data[__size];
};
Ça commençait bien jusqu'à ce que je souhaite faire ça :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
array<int, 3> array = { 1, 2, 3 };
Cela me donnait l'erreur suivante :
error: could not convert '{1, 2, 3}' from '<brace-enclosed initializer list>' to 'array<int, 3u>'
En regardant dans l'en-tête fournissant std::array, j'ai remarqué que le champ stockant les données était public, alors j'ai fait pareil et du coup l'erreur disparait.

Pourquoi ?

Merci d'avance pour vos réponses !