Моя виртуальная функция может возвращать либо одну T
, либо std::vector<T>
. Это хорошая идея вернуть boost::variant<T, std::vector<T>>
в этом случае или лучше всегда возвращать std::vector<T>
? Что выглядит лучше и имеет наименьшую производительность? Быстрее ли использовать вариант, когда возвращается одно значение?Должен ли я использовать boost :: variant?
2
A
ответ
4
Оценка производительности в стороне, это зависит от семантики вашей функции или, точнее, от возвращаемого значения.
Вам часто нужно различать (путь кода мудрый) между случаем, когда возвращается только один T
и многозначный случай? Или может простой for(auto t : create_T_orTs()) { ... }
делать правильные вещи в любом случае?
Моего шестое чувство, что первый вариант менее вероятно, чем второй, и так variant<>
поставляется с синтаксической «ценой» Я бы с KISS, и использовать std::vector<T>
, если нет сильной семантической причины различать один и несколько случаев.
Смежные вопросы
- 1. Как правильно использовать boost :: variant?
- 2. boost :: variant members подмножество другого boost :: variant
- 3. Итератор для boost :: variant
- 4. Инкремент boost :: variant value
- 5. QVariant vs boost :: any vs boost :: variant
- 6. boost :: variant and polymorphism
- 7. Безопасно ли сериализовать исходный boost :: variant?
- 8. C++ Simple Variant Boost
- 9. boost variant comparator
- 10. Рекомендация boost :: variant over union
- 11. Как определить, пуста ли переменная boost :: variant?
- 12. древовидные контейнеры boost :: variant - есть ли недостатки?
- 13. boost :: необязательная ссылка с boost :: variant type
- 14. Получить индекс boost :: variant с boost :: mpl
- 15. Полиморфный сеттер для Boost :: variant
- 16. Должен ли я # включить boost/Python.hpp или boost/python.hpp?
- 17. Должен ли я использовать boost для алгоритма :: join?
- 18. Должен ли я использовать std :: и boost :: префиксы повсюду?
- 19. Должен ли я начинать использовать boost в качестве начинающего C++?
- 20. Должен ли я использовать boost :: bind для создания полиморфных «преобразований»?
- 21. Хранение классов в boost :: variant
- 22. boost :: variant и void * pointers
- 23. Извлечение объектов из boost :: variant
- 24. Каковы различия между std :: variant и boost :: variant?
- 25. Поддерживает ли boost :: variant поддержку 64-битных целых чисел?
- 26. boost :: variant & STL контейнеры - Я делаю это неправильно?
- 27. Должен ли я использовать библиотеку Graph?
- 28. 2-D вектор boost :: variant в C++
- 29. Почему этот параметр boost :: variant не работает?
- 30. Каким образом ссылки на boost :: variant хранятся?
Забудьте о производительности, пока ваш профайлер не сообщит вам, что у вас есть узкое место. Что касается дилеммы, следует ли использовать «вектор» или «вариант >», я думаю, что невозможно дать ответ, не зная семантики вашей функции. –
Сохраните это просто, верните 'std :: vector', в обоих случаях вам нужно будет проверить, есть ли у вас один элемент' T' ('size() == 1') или многие. – alfC
Я так не думаю, статичный посетитель не должен выполнять эту проверку. – lizarisk