J'essaie de comprendre le boost array. Le code peut être lu facilement à partir du site de l'auteur. Dans la logique de conception, l'auteur (Nicolai M. Josuttis) a mentionné que les deux types d'initialisation suivants sont possibles.Comment initialiser un boost :: array?
boost::array<int,4> a = { { 1, 2, 3 } }; // Line 1
boost::array<int,4> a = { 1, 2, 3 }; // Line 2
Dans mon expérience avec g ++ (version 4.1.2), la ligne 1 fonctionne mais la ligne 2 ne l'est pas. (ligne 2 donne les éléments suivants:
warning: missing braces around initializer for 'int [4]'
warning: missing initializer for member 'boost::array<int, 4ul>::elems'
)
Néanmoins, ma principale question est, comment la ligne 1 fonctionne? J'ai essayé d'écrire une classe similaire à array.hpp et utiliser déclaration comme la ligne 1, mais cela ne fonctionne pas :-(. L'erreur est
typedef array< unsigned int, 10 > MyArray;
MyArray b = { { 1, 2, 3 } }; // Line 74
array_test.cpp:74: error: in C++98 'b' must be initialized by constructor, not by '{...}'
array_test.cpp:74: error: no matching function for call to 'array<unsigned int, 10u>::array(<brace-enclosed initializer list>)'
array.h:16: note: candidates are: array<unsigned int, 10u>::array()
array.h:16: note: array<unsigned int, 10u>::array(const array<unsigned int, 10u>&)
Quelqu'un peut me expliquer? Y at-il quelque chose de spécifique coup de pouce qui se passe dans ligne 1 que je dois être conscient de
Comme Potatoswatter mentionne cela ne fonctionne que pour POD les types. Cependant, il est probablement intéressant de noter que la prochaine spécification C++ 0x fournit des moyens de prendre en charge les listes d'initialisation avec des types autres que pod. –
vous avez probablement des champs constructeur ou privé dans votre classe – Anycorn
+ 1 @aaa: Merci beaucoup. Oui, mon tableau (les données) était privé dans ma classe. – Arun