Пример объекта класса, реализующего operator [], использующего список инициализаторов в качестве аргумента функции - PullRequest
1 голос
/ 06 октября 2019

[expr.sub] / 4 позволяет передать список инициализаторов в качестве аргумента operator[] для объекта типа класса. Каков практический пример использования этой техники?

1 Ответ

0 голосов
/ 08 октября 2019

Я думаю, что его можно использовать для подписи многомерного массива, если вы действительно хотите избежать злоупотребления operator(), что-то вроде этого:

template <class T, std::size_t N>
class Multi_array {
public:
    // ...
    reference operator[](const std::array<std::size_t, N>& index)
    {
        return elems[flatten(index)];
    }
    const_reference operator[](const std::array<std::size_t, N>& index) const
    {
        return elems[flatten(index)];
    }
    // ...
};

, тогда вы можете использовать arr[{3, 1, 4}].

...