Учитывая следующий надуманный (и да, ужасный) пример:
template<typename... Args>
void something(Args... args)
{
std::tuple<Args...> tuple; // not initializing for sake of example
std::get<0>(tuple) = 5;
}
Это работает, если вы называете это так:
int x = 10;
something<int>(x);
Однако, это не работает, если выназовите это так:
int x = 10;
something<int&>(x);
Из-за присвоения 5. Предполагая, что я не могу по какой-либо причине инициализировать кортеж, когда он определен, как я могу заставить это работать при указании типа какссылка?
В частности, я хотел бы, чтобы кортеж был std::tuple<int>
, даже если Args...
равен int&
.
Фактический вариант использования для этого включает десериализацию строки в кортежгде Args...
- это типы параметров функции, которая затем вызывается при распаковке кортежа.Все это прекрасно работает, за исключением случаев, когда функция принимает параметр по ссылке.
Я использую gcc 4.5.2, но принимаю ответ, который еще не реализован в этом компиляторе.