假设有以下编造(而且确实很糟糕)的例子:
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。假设无论出于什么原因,当定义元组时无法初始化元组,那么在指定类型为引用时,如何使其正常工作?
具体来说,即使Args...是int&,我也希望元组为std::tuple。
实际用例涉及将字符串反序列化为元组,其中Args...是传递给函数的参数类型,然后通过展开元组调用该函数。除了函数通过引用接受参数时,一切都很好。
我正在使用gcc 4.5.2,但会接受尚未在此编译器中实现的答案。
get<0>(tuple) = 5
赋值给什么呢? - Johannes Schaub - litbstd::decay
听起来正是我想要的,如果我能让它编译通过的话。也许在gcc 4.5.2中它在这个上下文中并没有得到完全支持? - Sydius