c++ - 折叠表达式作为 [] 运算符的参数

标签 c++

我正在尝试使用折叠表达式作为 [] 运算符的参数。不幸的是,只有第一个元素是正确的。

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
}

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

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
}

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

最佳答案

What is the reason?

数组下标运算符 (operator[]) 必须只有一个参数。您显示的第一个片段对于任何 sizeof...(U) != 1 都是无效的。

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


What would be the solution?

不要使用operator[]

关于c++ - 折叠表达式作为 [] 运算符的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54109874/

相关文章:

c++ - 如何在没有实现的情况下测试纯虚拟类?

c++ - 在 OpenGL 中将深度渲染到纹理时出现奇怪的结果

c++ - 从文件读取输入时创建进度条的最有效方法

c++ - Qt5 QT_TRANSLATE_NOOP 不适用于 tr()

c++ - 具有双向接口(interface)的基于 DLL 的应用程序框架 (Windows)

c++ - 如何找到 -lm lib 并将其包含在 CMake 中?

c++ - Qt中如何子类化?

c++ 将各种参数传递给父类构造函数(线程c++11)

c++ - RegOpenKeyEx 返回错误 87 又名 "INVALID_PARAMETER"

c++ - 检查新添加的unique_ptr到priority_queue的位置