[multi_array] Feature request: constructor and resize from values
I'd love to be able to use multi_array with classes that do not have a default constructor. At the moment, this is impossible, as both the constructor and resize functions only take extents as arguments (and possibly some other options), but no value_type, as for example std::vector does. Thus, trying to store objects without a default constructor in a multi_array results in hard compiler errors, with no workaround that I know of. This happens to me fairly often, as I use multi_array to organize sets of complex objects. If there is a technical reason why this is not possible, I would also be happy to learn it. Best regards, Eugenio Bargiacchi
As you don't give any example, I can't know exactly what you want to do. But how about using multi_array to store pointers? Then you can construct your objects at any time. On Fri, Nov 20, 2020 at 11:55 PM Eugenio Bargiacchi via Boost-users < boost-users@lists.boost.org> wrote:
I'd love to be able to use multi_array with classes that do not have a default constructor. At the moment, this is impossible, as both the constructor and resize functions only take extents as arguments (and possibly some other options), but no value_type, as for example std::vector does. Thus, trying to store objects without a default constructor in a multi_array results in hard compiler errors, with no workaround that I know of.
This happens to me fairly often, as I use multi_array to organize sets of complex objects. If there is a technical reason why this is not possible, I would also be happy to learn it.
Best regards, Eugenio Bargiacchi _______________________________________________ Boost-users mailing list Boost-users@lists.boost.org https://lists.boost.org/mailman/listinfo.cgi/boost-users
Ah, sorry, I thought it would have been automatically clear. Consider this example: class A { public: A(int) {} }; boost::multi_array array(boost::extents[2][2]); // Compiler error boost::multi_array array(boost::extents[2][2], A(3)); // What I would like array.resize(boost::extents[2][2]); // Again, compiler error array.resize(boost::extents[2][2], A(2)); // What I would like The variable `array` cannot be constructed in any way, as multi_array will try to default-construct it, and that will fail. Trying to simply create `array` with its default constructor works (although it will obviously be a zero-sized array), but when trying to resize it (to actually store things), the same thing will happen. Using pointers could work, but it's simply not viable, as it requires me to do memory management manually. I simply do not wish to do so, and it kind of runs contrary to modern C++ practices. I could use `unique_ptr`, but it feels more convoluted than it should be (along with requiring an additional layer of unneeded indirection). I feel multi_array should be capable of being constructed from existing values, just as `std::vector` and other standard containers can do. Would this be possible? On Sun, Nov 22, 2020 at 6:07 AM kila suelika via Boost-users < boost-users@lists.boost.org> wrote:
As you don't give any example, I can't know exactly what you want to do. But how about using multi_array to store pointers? Then you can construct your objects at any time.
On Fri, Nov 20, 2020 at 11:55 PM Eugenio Bargiacchi via Boost-users < boost-users@lists.boost.org> wrote:
I'd love to be able to use multi_array with classes that do not have a default constructor. At the moment, this is impossible, as both the constructor and resize functions only take extents as arguments (and possibly some other options), but no value_type, as for example std::vector does. Thus, trying to store objects without a default constructor in a multi_array results in hard compiler errors, with no workaround that I know of.
This happens to me fairly often, as I use multi_array to organize sets of complex objects. If there is a technical reason why this is not possible, I would also be happy to learn it.
Best regards, Eugenio Bargiacchi _______________________________________________ Boost-users mailing list Boost-users@lists.boost.org https://lists.boost.org/mailman/listinfo.cgi/boost-users
_______________________________________________ Boost-users mailing list Boost-users@lists.boost.org https://lists.boost.org/mailman/listinfo.cgi/boost-users
participants (2)
-
Eugenio Bargiacchi
-
kila suelika