我有一段看起来像这样的代码:
std::array<CPlayer,MAX_PLAYERS> Player;
#define Player(playerid) Player[playerid]
然后使用它如下:
Player(id).SomeMethod(some params);
但是这个定义只是丑陋而且我希望尽可能多地保留C ++方式,而std :: array确实有[]运算符而不是()运算符所以我尝试添加它:
template < class T, size_t N > T& std::array<T, N>::operator()(int index)
{
return this->at(index);
}
但它给了我以下错误:
error C2039: '()' : is not a member of 'std::array<_Ty,_Size>'
我该怎么办?我很傻。
答案 0 :(得分:3)
在定义类之后,无法向类中添加新成员(函数或变量)。
我个人认为如果它是一个数组,使用player[id].SomeMethod(some params);
就像你的建议一样。
答案 1 :(得分:3)
假设您只想使用函数调用()
语法(而不是其他方式)访问数组,您可以将其隐藏为函数中的本地静态变量:
CPlayer& Player(size_t i)
{
static std::array<CPlayer,MAX_PLAYERS> PlayerArray;
return PlayerArray[i];
}
但不知道你对下标[]
表达式有什么。