#include <iostream>
#include <string>
template<typename... Args>
void foo(Args&... args)
{
size_t param_count = sizeof...(args);
std::string sarray[] = { (args)... }; // <= Copy-array
sarray[0] = "Goodbye";
}
int main()
{
std::string str1 = "Hello";
std::string str2 = "World";
std::cout << str1 << std::endl;
std::cout << str2 << std::endl;
foo(str1, str2);
std::cout << str1 << std::endl;
std::cout << str2 << std::endl;
system("pause");
return 0;
}
Возможно ли при передаче пака параметров принять его по ссылке и что-то изменить в одном из параметров?
Навскидку придумалось - сработать через указатели:
template<typename... Args>
void foo(Args&... args)
{
constexpr size_t param_count = sizeof...(args);
string* sarray[param_count] = { &args... }; // <= Copy-array
*(sarray[0]) = "Goodbye";
}
Альтернативный вариант: воспользоваться std::tie
:
#include <tuple>
template<typename... Args>
void foo(Args & ... args)
{
auto items{::std::tie(args...)}; // кортеж ссылок
::std::get<0>(items).assign("Goodbye"); // проверка индекса во время компиляции
}
Для простого случая, когда все аргументы имеют одинаковый тип, можно написать нешаблонную функцию воспользовавшись std::initializer_list
:
#include <initializer_list>
#include <string>
#include <type_traits>
#include <iostream>
void foo(::std::initializer_list<::std::reference_wrapper<::std::string>> args)
{
auto p_args{args.begin()};
p_args[0].get() = "Goodbye";
}
int main()
{
std::string str1 = "Hello";
std::string str2 = "World";
std::cout << str1 << std::endl;
std::cout << str2 << std::endl;
foo({str1, str2});
std::cout << str1 << std::endl;
std::cout << str2 << std::endl;
return 0;
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Задали нам на дом найти факториал 16!, используя MPIВсё хорошо считается до тех пор, пока два MPI_Bcast не начинают отправлять сообщения всем потокам
подскажите пожалуйста, на каком примере можно рассмотреть промахи в кэш L2 и попадание в кэш L3? я не могу найти примеров на c++, где на конкретном...
Не могу понять почему слово симметрична выводится 16 раз, n и m равны 4, и такое ощущение что код как то эти значения умножаетВ чем ошибка ? вот...
Пытаюсь добавить Qt5 в готовый проектВозникли две ошибки: undefined reference to "_imp___ZN12QApplicationC1ERiPPci' и undefined reference to "_imp___ZN12QApplicationD1Ev'