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 :
Ça commençait bien jusqu'à ce que je souhaite faire ça :Code:
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]; };
Cela me donnait l'erreur suivante :Code:array<int, 3> array = { 1, 2, 3 };
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.error: could not convert '{1, 2, 3}' from '<brace-enclosed initializer list>' to 'array<int, 3u>'
Pourquoi ? :weird:
Merci d'avance pour vos réponses !