【问题标题】:Why can´t I overload the C++ operator[] with two parameters? [duplicate]为什么我不能用两个参数重载 C++ 运算符 []? [复制]
【发布时间】:2020-03-25 00:22:52
【问题描述】:

我知道这行得通:

struct vtx
{
    long  operator[](long line)
    {
        return line;
    }
};

但是为什么我不能这样做来模拟两列访问?有什么办法吗?

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

【问题讨论】:

  • 看看答案here
  • 改用long operator()(size_t line, size_t column);

标签: c++ operator-overloading


【解决方案1】:

operator[] 被定义为只接受 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)]

【讨论】:

  • 您可能会改用foo[{0, 1}]。但是,您不妨首先使用operator(),它实际上可以接受多个参数,例如foo(1, 2)
  • @MaxLanghof 哇,我不知道用于元组的花括号有效。谢谢!
猜你喜欢
  • 2011-07-09
  • 2015-11-13
  • 2018-03-16
  • 2011-02-07
  • 2023-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多