我有一个模板类class PermsServer {
has(role, companyIds = null, value = null){
const self = this;
const rolesData = self._getRoles(role, companyIds);
if (!rolesData[0]) return false;
// Check roles
const hasRole = self._checkType(rolesData[0], value);
return hasRole;
}
_getRoles(roles = null, companyIds = null){
const self = this;
const cursor = self.dataScope.aggregate([
{
$match: filter
},
{
$lookup: {
from: 'nx_perms',
localField: 'role',
foreignField: 'role',
as: 'perm_docs'
}
}
]);
return cursor.toArray(); // This returns a promisse 'Pending'
}
}
,其中定义了以下三个成员函数。
Array<T>
接下来,我还有另一个模板类template <typename T>
const T& Array<T>::GetElement(int index) const {
if(index_out_of_bounds(index)) throw OutOfBoundsException(index);
return m_data[index];
}
template <typename T>
T& Array<T>::operator [] (int index) {
if(index_out_of_bounds(index)) throw OutOfBoundsException(index);
return m_data[index];
}
template <typename T>
const T& Array<T>::operator [] (int index) const {
if(index_out_of_bounds(index)) throw OutOfBoundsException(index);
return m_data[index];
}
,它从NumericArray<T>
继承。此类包含重载的运算符Array<T>
。
+
现在假设我在main.cpp中实例化template <typename T>
NumericArray<T> NumericArray<T>::operator + (const NumericArray<T> &na) const {
unsigned int rhs_size = this -> Size(), lhs_size = na.Size();
if(rhs_size != lhs_size) throw SizeMismatchException(rhs_size, lhs_size);
NumericArray<T> array_sum(rhs_size);
for(unsigned int i = 0; i < rhs_size; i++) {
array_sum[i] = this[i] + na[i];
}
return array_sum;
}
的两个实例
其中T为NumericArray<T>
类型。两个实例都已经填充了整数值。
如果我现在尝试执行int
运算符,则会收到以下错误消息:
../ NumericArray.tpp:44:16:错误:分配中无法将“ NumericArray”转换为“ int” array_sum [i] = this [i] + na [i];
但是,如果我返回并将+
中重载的operator+
的for循环中的实现更改为以下内容。操作员会按预期进行。
NumericArray<T>
如果下标运算符array_sum[i] = this -> GetElement[i] + na.GetElement[i];
具有相同的实现,为什么它们的行为不相同?
答案 0 :(得分:4)
问题是您正尝试将1.25kg, 2.5kg, 5kg, 10kg, etc
应用于指针类型:
GYM EQUIPMENT WEIGHT
----------------------
id GymId EquipmentId Weight
1 1 3 2.5
2 1 3 5
3 1 3 10
4 1 3 25
5 1 3 35
6 1 3 45
7 2 3 5
8 2 3 25
9 2 3 45
.......
由于operator []
是一个指针,因此您必须
1)首先取消引用指针以应用重载的运算符。
或
2)应用 for(unsigned int i = 0; i < rhs_size; i++) {
array_sum[i] = this[i] + na[i];
运算符,然后使用this
关键字访问重载的运算符。
以下是两种可能的解决方案的说明:
->
或
operator
在第二种解决方案中, array_sum[i] = (*this)[i] + na[i];
不是必需的:
array_sum[i] = this->operator[](i) + na[i];