Тип возвращаемого значения C++ в зависимости от количества аргументов функцииC++

Программы на C++. Форум разработчиков
Ответить
Гость
 Тип возвращаемого значения C++ в зависимости от количества аргументов функции

Сообщение Гость »


У меня есть следующая структура:

#define vec std::vector структура А { станд::mt19937 кольцо; std::uniform_real_distribution U; А(){} A(целое число) { rng.seed(СЭД); U = std::uniform_real_distribution(0, 100000); } шаблон vec get(std::size_t size) { vec первый (размер); для (авто &x: первый) x = U(rng); вернуться первым; } шаблон vec get(std::size_t size1, std::size_t size2) { vec rst(size1); для (авто &x: первый) get(size2).swap(x); вернуться первым; } шаблон vec get(std::size_t size1, std::size_t size2, std::size_t size3) { vec rst(size1); для (авто &x: первый) get(size2, size3).swap(x); вернуться первым; } }; #undef век Я знаю, что это может быть непростая задача, но как написать функцию-член magicGet(), чтобы при этом:

auto u = MagicGet(3, 1, 2, 5); auto v = MagicGet(7, 9, 6, 2, 2); авто w = MagicGet(6); Я получу u типа vec, v типа vec и w типа vec и т. д.? Если это невозможно, какое решение будет наиболее близким?

Обновление: приняв принятый ответ и сообщение от @Shreeyash Shrestha, самым простым решением может быть:
шаблон auto MagicGet(std::size_t size, Args... args) { если constexpr (sizeof...(args) == 0) { vec первый (размер); для (авто &x: первый) x = U(rng); вернуться первым; } else // Тело кода должно быть обернуто внутри else {}, чтобы гарантировать, что компилятор // знает, что они взаимоисключающие. { vec rst(size); for (auto &x: rst) MagicGet (args...).swap(x); вернуться первым; } }
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»