Если я правильно понял, вы хотите расширить пакет параметров шаблона на несколько элементов кортежа. Вот как это сделать, например:
template <typename FirstType, typename ...NextTypes>
static std::vector<std::tuple<std::shared_ptr<FirstType>, std::shared_ptr<NextTypes>...>> some_function(FirstType t, NextTypes... n) {
return { make_tuple(make_shared<FirstType>(t), make_shared<NextTypes>(n)...) };
}
После вызова функции вы получите вектор с кортежем, в котором хранятся три std::shared_ptr
указателя:
int main() {
int* ip = nullptr;
long* lp = nullptr;
double* dp = nullptr;
auto v = some_function(ip, lp, dp);
auto t = v.front();
auto sp = get<1>(t);
if (sp) cout << "Not NULL" << endl;
return 0;
}