考虑以下代码:
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
)。