1

我有一段代码,如下所示:

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

我能做些什么呢?我一无所知。

4

2 回答 2

3

假设您只想使用函数调用()语法(并且没有其他方式)访问数组,您可以将其隐藏为函数中的局部静态变量:

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

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

于 2013-07-12T22:45:30.077 回答
3

在定义类后,不能向类添加新成员(函数或变量)。

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

于 2013-07-12T22:27:58.520 回答