- 1
- 2
- 3
- 4
- 5
typedef ::boost::array<T, item_amount+1> not_raw_array;
union data
{
not_raw_array m_raw_array;//Most members of boost::array not suitable for call with raw array. Be careful!
};
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+11
typedef ::boost::array<T, item_amount+1> not_raw_array;
union data
{
not_raw_array m_raw_array;//Most members of boost::array not suitable for call with raw array. Be careful!
};
defecate-plusplus 27.03.2013 11:26 # +5
TarasB 27.03.2013 11:34 # +2
LispGovno 27.03.2013 11:35 # −2
bormand 27.03.2013 18:41 # +2
LispGovno 27.03.2013 19:09 # +3
Это часть контейнера. Автор не использовал not_raw_array напрямую, а завернул его в union, чтобы иметь возможность произвольно создавать и убивать объекты в m_raw_array массиве. Иначе без union в not_raw_array объекты создадутся сами, если имеют нетривиальный конструктор. Может в С++11 оно у автора и работало, но у меня вчера бомбануло, когда я дописал конструктор в структуру (шаблонное T), что хранил в этом контейнере.
defecate-plusplus 27.03.2013 20:12 # +3
ставлю плюс за задумку, тру какир
roman-kashitsyn 27.03.2013 20:27 # +2
defecate-plusplus 27.03.2013 20:48 # 0
roman-kashitsyn 27.03.2013 21:14 # 0
defecate-plusplus 27.03.2013 22:37 # 0
хак окей
char[...] это, как ни крути, массив чаров, и чтобы получить i-тый T & из него, нужно мало того, что развлекаться с sizeof(T), но и постоянно приводить (char *) к (T *), а (char const *) к (T const *)
сделал бы я так же, если бы приспичило (тьфу тьфу)? нет, слишком неочевидно - не проссышь без объяснений, что это вообще, в отличие от классического char[...]
bormand 27.03.2013 22:57 # +1
> постоянно приводить
Сколько сарказма в этом предложении... Осторожнее надо быть, читатели ведь и правда могут поверить, что там что-то сложнее пары приватных методов с одним реинтерпрет кастом внутри, да сайзофа при объявлении массива...
roman-kashitsyn 27.03.2013 23:57 # 0
bormand 28.03.2013 00:07 # +1
TarasB 28.03.2013 09:26 # +4
LispGovno 28.03.2013 16:22 # 0
То есть недоконструированные объекты в случае исключения он не откатит.
В случае исключения я даже узнать не смогу что успело создаться, а что нет
LispGovno 28.03.2013 16:50 # 0
А ещё в конструкторе и assignment operator
У меня конечно есть исходники и сейчас поправлю, но противно.
Что посоветуете взамен std::uninitialized_copy, окромя самописного велосипеда? Может что из буста?