c++ - 如何从函数运算符(x,y)返回向量元素的引用
问题描述
我有一个类模板,其中包含一个 T 向量作为受保护的成员变量。我想重载 operator() 以便它返回第 y 行和第 x 列中向量元素的引用。
当我将 operator() 函数声明为:
template <class T>
T & ArrayT<T>::operator()(unsigned int x, unsigned int y)const{
return buffer[y*width + x];
}
我收到 C2440 错误:'return':无法从 'const_Ty' 转换为 'T&'
如果我将运算符函数声明为:
template <class T>
const T & ArrayT<T>::operator()(unsigned int x, unsigned int y)const{
return buffer[y*width + x];
}
然后我的代码编译但是如果例如我创建一个派生的模板类,其中 T 是浮点数并且我写(obj 是派生类的对象,具有浮点数的成员变量向量):
float f=obj(i,j);
f=pow(f,2);
然后似乎什么也没有发生。向量内 i,j 位置的浮点数没有改变,因此假设我没有真正处理引用,因为如果操作符 () 返回了引用,则上述行应更改位置 (i,j) 中的元素正确的?
我是 C++ 新手,我知道我在这里可能会犯一些非常愚蠢的错误,但欢迎任何形式的帮助。
解决方案
声明不带 的运算符const
,如下所示:
template <class T>
T & ArrayT<T>::operator()(unsigned int x, unsigned int y) {
return buffer[y*width + x];
}
像这样访问元素:
float & f = obj(i, j);
我们通常提供 const 运算符(就像 OP 一样):
template <class T>
const T & ArrayT<T>::operator()(unsigned int x, unsigned int y) const {
return buffer[y*width + x];
}
float f = obj(i, j); // f is copy of current i,j value
const float & f = obj(i, j); // f references i,j value, i.e. we can
// observe future modifications
推荐阅读
- javascript - 二次曲线svg的预测参数
- vue.js - 如何创建具有固定宽度内容的 v-toolbar
- react-native - React Native 应用程序中的客户端身份验证
- android - 如何在 Android 中使用 JNI 制作 https POST?
- javascript - “如何修复激活循环内所有按钮的 onclick()
- python - 将数组内容传递给函数无法正常工作
- laravel - 使用 silber/bouncer-rc5 从 laravel 5.7 更新到 laravel 5.8 后检查权限的时间明显增加
- ruby-on-rails - 如何从此哈希中访问值?
- c - 是否有允许等待多个资源的内置信号量结构?
- scala - scala - 按数据类型字符串匹配并获取其频率