использование фигурных скобок для создания объекта без использования initializer_list - PullRequest
2 голосов
/ 16 апреля 2020

В моем проекте есть Container.

Обычно я создаю объект с помощью фигурных скобок, например: Container x{1,2,3}.

Хорошо работает, используя std::initializer_list под C ++ 11.

Однако, когда я перехожу в среду, которая не поддерживает C ++ 11, std::initializer_list больше не может использоваться.

Могу ли я по-прежнему использовать фигурные скобки для создания объекта, когда я не используете initializer_list? Может быть, какую-то технику следует использовать? Я не уверен.

Спасибо за ваше время.

Приложение

Наивная реализация показана следующим образом (некоторая защита от копирования здесь не написана для простоты):

#include <iostream>
#include <initializer_list>

class Container
{
public:
    explicit Container(std::initializer_list<double> initializer_list)
    {
        size = initializer_list.size();
        data = new double[size];
        int i = 0;
        for (auto it = initializer_list.begin(); it != initializer_list.end(); ++it)
        {
            data[i] = *it;
            i++;
        }
    }

    ~Container()
    {
        delete[] data;
    }

    void print()
    {
        std::cout << "--------------" << std::endl;
        for (int i = 0; i < size; i++)
        {
            std::cout << "[" << i << "]" << data[i] << std::endl;
        }
    }

private:
    int size;
    double *data;
};

int main()
{
    Container a{1, 2, 3, 4, 5};
    a.print();

    Container b{1, 2, 3};
    b.print();
    return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...