с кортежами и boost.fusion, есть ли смысл использовать структуру?

кортежи похожи на структуры (обсуждается здесь: Boost::Tuples vs Structs для возвращаемых значений). похоже, единственное преимущество в том, что структуру удобнее писать, потому что она короче и по ключу, а не по номеру.

можно также использовать карту слияния и структуры для доступа по ключу Boost::Tuples vs Structs для возврата значения для имитации структур. это немного больше письма.

кажется, что штрафа в производительности тоже нет. ну, слияние может быть быстрее, поскольку оно использует представления.

так что единственная причина использовать структуры - это если вы не хотите писать еще несколько строк кода и сохранять код читабельным?


person kirill_igum    schedule 11.01.2013    source источник


Ответы (2)


так что единственная причина использовать структуры - это если вы не хотите писать еще несколько строк кода и сохранять код читабельным?

Кроме того, существует расширяемость/обслуживаемость - было бы довольно сложно поместить/изменить/удалить любой дополнительный позиционный аргумент в кортеже, но это намного проще с поиском структуры "ключ-значение".

Качество кода — это сочетание производительности, удобочитаемости, ясности, расширяемости и т. д. Игнорирование любых этих значений сделает ваш код хуже. И это плохо.

person hate-engine    schedule 12.01.2013
comment
ключ-значение также возможно при слиянии, см. ассоциативные кортежи на boost.org/doc/libs/1_52_0/libs/fusion/doc/html/fusion/. но синтаксис не такой чистый, к сожалению. - person kirill_igum; 12.01.2013

Структуры могут быть подклассами и могут содержать методы, виртуальные функции, перечисления, определения типов, подструктуры и многое другое.

Кортежи могут представлять только самую тривиальную функциональность struct, то есть набор значений. И он даже не может дать им имена собственные. Они очень плохой заменитель.

person StilesCrisis    schedule 12.01.2013
comment
я должен был отметить, что меня интересовало хранение данных, а не использование их в качестве объекта или класса. также вы можете использовать std::function в кортеже - person kirill_igum; 12.01.2013
comment
Что ж, если ваш вопрос заключается в том, могут ли кортежи хранить значения, конечно, могут. Но структура — это гораздо больше, и кортежи не поддерживают большую часть того, что может делать структура. - person StilesCrisis; 12.01.2013