C++ std::array的重载()运算符给出:错误C2039:';()';:不是';std::数组<_Ty,_尺寸>';

C++ std::array的重载()运算符给出:错误C2039:';()';:不是';std::数组<_Ty,_尺寸>';,c++,arrays,c++11,operator-overloading,C++,Arrays,C++11,Operator Overloading,我有一段代码如下所示: std::array<CPlayer,MAX_PLAYERS> Player; #define Player(playerid) Player[playerid] 但是这个定义很丑陋,我想尽可能地保留它的C++方式,而STD::数组确实有[]操作符,而不是()操作符,所以我尝试添加这个: template < class T, size_t N > T& std::array<T, N>::operator()(int ind

我有一段代码如下所示:

std::array<CPlayer,MAX_PLAYERS> Player;
#define Player(playerid) Player[playerid]

但是这个定义很丑陋,我想尽可能地保留它的C++方式,而STD::数组确实有[]操作符,而不是()操作符,所以我尝试添加这个:

template < class T, size_t N > T& std::array<T, N>::operator()(int index)
{
    return this->at(index);
}
templateT&std::array::operator()(int-index)
{
返回此->在(索引);
}
但它给了我以下错误:

error C2039: '()' : is not a member of 'std::array<_Ty,_Size>'
错误C2039:“()”:不是“std::array”的成员

我能做些什么?我不知道。

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


我个人认为,如果它是一个数组,使用
player[id].SomeMethod(一些参数)按照您的建议工作。

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


我个人认为,如果它是一个数组,使用
player[id].SomeMethod(一些参数)按照您的建议工作。

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

CPlayer& Player(size_t i)
{
    static std::array<CPlayer,MAX_PLAYERS> PlayerArray;
    return PlayerArray[i];
}
CPlayer和Player(大小)
{
静态标准::阵列播放阵列;
返回玩家阵列[i];
}

但不知道您对下标
[]
表达式有何反对意见。

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

CPlayer& Player(size_t i)
{
    static std::array<CPlayer,MAX_PLAYERS> PlayerArray;
    return PlayerArray[i];
}
CPlayer和Player(大小)
{
静态标准::阵列播放阵列;
返回玩家阵列[i];
}

不知道你有什么下标<代码> []/COD>表达式?< /p>为什么不能使用<代码>运算符[]/COD>?如果你想保持它尽可能地像C++那样,使用适当的索引操作符!代码>玩家定义(播放器)(PoReRID)<代码>是唯一的目的,改变<代码>(<代码> >代码> [< /代码>?浪费时间写……为什么不能使用<代码>操作符[]/Cube >?如果你想尽可能地保持C++,请使用适当的索引操作符!<代码>定义玩家(PrReRID)播放器[PrReRID]
是将
更改为
[
?写代码有点浪费时间……而且不允许标准库的运算符过载,即使他们不必是成员。这是双重打击。而且不允许标准库的运算符过载,即使他们不必是成员。双重打击。我对此没有异议,朱我并不反对它,只是看起来更好