У меня есть что-то вроде следующего кода:
template<typename T1, typename T2, typename T3, typename T4>
void inc(T1& t1, T2& t2, T3& t3, T4& t4) { ++t1; ++t2; ++t3; ++t4; }
template<typename T1, typename T2, typename T3>
void inc(T1& t1, T2& t2, T3& t3) { ++t1; ++t2; ++t3; }
template<typename T1, typename T2>
void inc(T1& t1, T2& t2) { ++t1; ++t2; }
template<typename T1>
void inc(T1& t1) { ++t1; }
Я бы хотел переопределить его, используя предложенные вариационные шаблоны из будущего стандарта. Однако все примеры, которые я видел до сих пор в Интернете, кажутся похожими на printf, разница здесь, похоже, заключается в использовании ссылок. Я придумал следующее:
inline void inc() { }
template<typename T>
inline void inc(T&& t) { ++t; }
template<typename T,typename ... Args>
inline void inc(T&& t, Args&& ... args) { ++t; inc(args...); }
То, что я хотел бы знать, это:
Должен ли я использовать r-значения вместо ссылок?
Возможные подсказки или подсказки относительно того, как правильно выполнить то, что я хочу.
Какие гарантии предоставляет новый предлагаемый стандарт в отношении вопроса о рекурсивных вызовах функций, есть ли какой-либо признак того, что приведенная выше версия с переменным числом аргументов будет столь же оптимальной, как и оригинал? (Должен ли я добавить inline или что-то в этом роде?)