考虑以下代码:
template <unsigned int Index, class Tuple, class Type = /* Something1 */>
Type forward(Tuple&& tuple)
{
return /* Something2 */;
}
我想找出正确的语法/* Something1 */和/* Something2 */为了转发由Index输入指定的元素tuple。我知道可以使用其他概念/语法,但是为了正确理解事物在这种情况下的工作方式(将其视为学术练习),我想要一个满足以下条件的答案:
- 不同情况下没有重载:只有一个模板化函数
forward - 除了
/* Something1 */and没有变化/* Something2 */_Type&&Type - 元编程的疯狂,
decltype并被std::declval接受
例如,如果Tuple = std::tuple<char, int, double>,forward<2>(tuple)则应转发第三个元素(如果元组作为 const 引用传递,则函数应返回对 的 const 引用double)。