В следующем я не уверен относительно моего использования std::apply
...
Я вижу две проблемы в вашем использовании std::apply()
( 1) std::apply()
требует std::tuple
или аналогичный для второго аргумента. Для "или подобного" я имею в виду "или std::array
или std::pair
".
Так что ваш std::vector
не работает.
Полагаю, вы можете использовать std::array
.
Я предлагаю следующее Base
template<typename ...T>
struct Base {
std::array<int, sizeof...(T)> vect;
template <int ... Is>
Base (std::integer_sequence<int, Is...>) : vect {{ (Is+1)*(Is+1) ... }}
{ }
Base () : Base{std::make_integer_sequence<int, sizeof...(T)>{}}
{ }
};
(2) первый аргумент std::apply()
не совместим с (не stati c) методом.
Но вы можете обернуть это использование в лямбду, поэтому я предлагаю
lastResult = std::apply([=](auto ... args)
{ return this->foo(args...); },
this->vect);