Как именно я могу перегрузить оператор '{'? - PullRequest
0 голосов
/ 31 марта 2020

Чтобы инициализировать std :: vector, я могу напрямую использовать initializer_list, например, так:

std::vector<int> myVec = {1, 2, 3, 4};

Если я создаю пользовательский список List (который будет содержать несколько элементов), например class customVector (для простоты только с целыми числами, я думаю, я мог бы сам при необходимости выяснить, как это сделать с шаблонами), могу ли я перегрузить оператор '{' таким образом, чтобы экземпляр customVector мог быть инициализирован в то же самое? Чтобы я мог написать

customVector myCustomVec = {1, 2, 3, 4}

Ответы [ 3 ]

2 голосов
/ 31 марта 2020

Вы можете выполнить sh того, что в конечном итоге хотите, но не перегружая никакие операторы - { не является оператором.

vector делает это, имея конструктор, который принимает initializer_list параметр, и вы можете сделать то же самое с вашим классом.

Изучение, как это сделать и реализовать его, оставлено в качестве упражнения.

1 голос
/ 31 марта 2020

Вы не можете, так как { не является оператором. До C++20 следующие операторы были переопределены:

+    -    *    /    %    ^    &    |    ~    !    =
<    >    +=   -=   *=   /=   %=   ^=   &=   |=   <<
>>   >>=  <<=  ==   !=   <=   >=   &&   ||   ++   --
,    ->*  ->   ()   []

C++20 добавлен оператор космического корабля <=>, но я верю, что это так.

0 голосов
/ 31 марта 2020

Как указали другие, { не является оператором. Однако вы все равно можете использовать список инициализатора по своему усмотрению. Это часть стандартной библиотеки.

#include <iostream>
#include <initializer_list>
using namespace std;

template <typename T>
struct customVector {
    customVector(std::initializer_list<T> list) : size(list.size()) {
        arr = new T[size];
        int count = 0;
        for(auto val: list) arr[count++] = val;
    }
    T* arr;
    std::size_t size;

    ~customVector() {
        for(int i = 0; i < size; i++)
            std::cout << arr[i] << std::endl;
        delete [] arr;
    }
};

int main() {
    customVector<int> myCustomVec = {1, 2, 3, 4};
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...