将表达式折叠为[]运算符的参数

zap*_*hod 2 c++

我试图使用fold表达式作为[]运算符的参数.不幸的是,只有第一个元素是正确的.

template <class ...U> T& operator[](U ...indices){
    size_t i=0, k[get_n_dimensions()];
    (... , void(k[i++]=indices));
    // use k[0], k[1], ...
    // only k[0] is correct
}
Run Code Online (Sandbox Code Playgroud)

但是,如果我对函数的参数使用相同的语法,它可以正常工作.

template <class ...U> T get(U ...indices) const {
    size_t i=0, k[get_n_dimensions()];
    (... , void(k[i++]=indices));
    // k[0], k[1], ... filled correctly
}
Run Code Online (Sandbox Code Playgroud)

是什么原因?什么是解决方案?

Vit*_*meo 7

是什么原因?

数组下标operator(operator[])必须只有一个参数.您显示的第一个代码段对任何代码均无效sizeof...(U) != 1.

get或其他运算符之类的函数模板operator()没有类似的限制.


什么是解决方案?

不要用operator[].

  • 请改进这篇文章,或将其作为(好)评论.:) (2认同)