// VERSION 1
struct Range { int begin, end; };
inline Range getRange()
{
int newBegin, newEnd;
// do calculations
return {newBegin, newEnd};
}
struct Test
{
std::vector<Range> ranges;
inline void intensive()
{
ranges.push_back(getRange());
// or ranges.emplace_back(getRange());
// (gives same performance results)
}
};
// VERSION 2
struct Range { int begin, end; };
struct Test
{
std::vector<Range> ranges;
inline void intensive()
{
int newBegin, newEnd;
// do calculations
ranges.emplace_back(newBegin, newEnd);
}
};
Version 2 всегда быстрее, чем версии 1.Есть ли способ заменить возвращаемое значение?
Факт, getRange()
Используется несколькими классами. Если бы я применил версии 2, было бы много дублирования кода.
Кроме того, я не могу передать ranges
как неконстантная ссылку на getRange()
, так как некоторые другие классы используют std::stack
вместо std::vector
. Мне пришлось бы создавать множественные перегрузки и иметь больше дубликатов кода.
Есть ли общий способ/идиома до заменить возвращаемое значение?
Попробуйте возвращающий ссылку г-значение из 'функции getRange'. –
«Версия 2 всегда быстрее версии 1.» - и это утверждение основано на ... что? – Xeo
@MohammadAliBaydoun: Нет, полная остановка, ветер назад и снова подумайте. – Xeo