std :: array的重载()运算符给出:错误C2039:'()':不是'std :: array< _Ty,_Size>'的成员

时间:2013-07-12 22:20:21

标签: c++ arrays c++11 operator-overloading

我有一段看起来像这样的代码:

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>'

我该怎么办?我很傻。

2 个答案:

答案 0 :(得分:3)

在定义类之后,无法向类中添加新成员(函数或变量)。

我个人认为如果它是一个数组,使用player[id].SomeMethod(some params);就像你的建议一样。

答案 1 :(得分:3)

假设您只想使用函数调用()语法(而不是其他方式)访问数组,您可以将其隐藏为函数中的本地静态变量:

CPlayer& Player(size_t i)
{
    static std::array<CPlayer,MAX_PLAYERS> PlayerArray;
    return PlayerArray[i];
}

但不知道你对下标[]表达式有什么。