2013-07-08 3 views
2

Моя виртуальная функция может возвращать либо одну T, либо std::vector<T>. Это хорошая идея вернуть boost::variant<T, std::vector<T>> в этом случае или лучше всегда возвращать std::vector<T>? Что выглядит лучше и имеет наименьшую производительность? Быстрее ли использовать вариант, когда возвращается одно значение?Должен ли я использовать boost :: variant?

+3

Забудьте о производительности, пока ваш профайлер не сообщит вам, что у вас есть узкое место. Что касается дилеммы, следует ли использовать «вектор » или «вариант >», я думаю, что невозможно дать ответ, не зная семантики вашей функции. –

+2

Сохраните это просто, верните 'std :: vector', в обоих случаях вам нужно будет проверить, есть ли у вас один элемент' T' ('size() == 1') или многие. – alfC

+0

Я так не думаю, статичный посетитель не должен выполнять эту проверку. – lizarisk

ответ

4

Оценка производительности в стороне, это зависит от семантики вашей функции или, точнее, от возвращаемого значения.

Вам часто нужно различать (путь кода мудрый) между случаем, когда возвращается только один T и многозначный случай? Или может простой for(auto t : create_T_orTs()) { ... } делать правильные вещи в любом случае?

Моего шестое чувство, что первый вариант менее вероятно, чем второй, и так variant<> поставляется с синтаксической «ценой» Я бы с KISS, и использовать std::vector<T>, если нет сильной семантической причины различать один и несколько случаев.

Смежные вопросы