#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;
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Задали нам на дом найти факториал 16!, используя MPIВсё хорошо считается до тех пор, пока два MPI_Bcast не начинают отправлять сообщения всем потокам
подскажите пожалуйста, на каком примере можно рассмотреть промахи в кэш L2 и попадание в кэш L3? я не могу найти примеров на c++, где на конкретном...
Не могу понять почему слово симметрична выводится 16 раз, n и m равны 4, и такое ощущение что код как то эти значения умножаетВ чем ошибка ? вот...
Пытаюсь добавить Qt5 в готовый проектВозникли две ошибки: undefined reference to "_imp___ZN12QApplicationC1ERiPPci' и undefined reference to "_imp___ZN12QApplicationD1Ev'