Здравствуйте, vopl, Вы писали:
V>А я бы вот докопался все таки
Докопаться всегда можно и приятно. )))
V>1. Метод sum — сначала конструируется пустой результат а затем наполняется значениями. Почему сразу не конструировать с нужными значениями?
Да, можно и так:
template<typename R, typename F, typename S, std::size_t ... Indexes>
constexpr R sum(F && f, S && s, std::index_sequence<Indexes...>)
{
return {(f.template get<Indexes>() + s.template get<Indexes>())...};
}
V>2. Метод get своим именем как бы намекает, что с его помощью нужно "получать". А на практике, с его помощью можно еще и модифицировать. Такой get должен называться как нибудь типа at
Так мы и получаем, либо ссылку на существующий элемент, либо копию значения по-умолчанию.
В защиту себя могу сказать, что я не знаю английский язык.
В защиту get могу привести в пример std::get, а не std::at.
V>3. operator+ получился не консэкспр, хотя таковым обозначен
Убрать из конструктора и деструктора вывод, на operator+ навесить const, переменные в main сделать constexpr и готово, дело-то минута.
https://wandbox.org/permlink/KWzCCxayORVCTagc