C++ 为什么可以´;t I重载C++;运算符[]具有两个参数?

C++ 为什么可以´;t I重载C++;运算符[]具有两个参数?,c++,operator-overloading,C++,Operator Overloading,我知道这是可行的: struct vtx { long operator[](long line) { return line; } }; 但是为什么我不能做类似的事情来模拟两列访问呢?有什么办法吗 struct vtx { long operator[](long line, long column) { return line + column; //resolved later } }; 运算符[]定义

我知道这是可行的:

struct vtx
{
    long  operator[](long line)
    {
        return line;
    }
};
但是为什么我不能做类似的事情来模拟两列访问呢?有什么办法吗

struct vtx
{
    long  operator[](long line, long column)
    {
        return line + column; //resolved later
    }
};

运算符[]
定义为仅接受1个参数。不能接受2个参数,但可以接受一个元组:

struct vtx
{
    long  operator[](std::tuple<long, long> loc)
    {
        return std::get<0>(loc) + std::get<1>(loc);
    }
};

// used as foo[std::make_tuple(0, 1)]
struct vtx
{
长运算符[](标准::元组位置)
{
返回std::get(loc)+std::get(loc);
}
};
//用作foo[std::make_tuple(0,1)]

查看答案,只需使用
长运算符()(大小行、大小列)foo[{0,1}]
。但是你最好首先使用
operator()
,它实际上可以接受多个参数,比如
foo(1,2)
@MaxLanghof哇,我不知道元组的花括号有效。谢谢