Как лучше всего изменить группу объектов-членов таким же образом? - PullRequest
0 голосов
/ 02 октября 2019

Может быть, я привередлив, но мне хотелось бы узнать ваше мнение о том, как лучше всего написать что-то подобное (моя проблема намного сложнее, но ее можно упростить вот так):

class A
{
public:
        A ();
        A (const size_t dim0, const size_t dim1);

        void set_is_x_allocated (const bool);
        void set_is_y_allocated (const bool);
        void set_is_z_allocated (const bool);

private:
        void allocate (vector<vector<double>> &) const; ??

        size_t dim0;
        size_t dim1;

        bool is_x_allocated;
        bool is_y_allocated;
        bool is_z_allocated;

        vector<vector<double>> x;
        vector<vector<double>> y;
        vector<vector<double>> z;
};

Когда заданы размеры, я бы хотел распределить x, y, z таким же образом (в зависимости от того, как установлены логические значения is_x / y / z_allocated). На данный момент у меня есть следующие решения:

Решение 1: Создайте функцию выделения, как описано выше, и вызовите if (is_x_allocated) allocate (x); и т. Д.

Плюсы: x, y, z будут выделенытаким же образом -> легче обнаружить ошибки, изменить код, если в будущем появится третье измерение.

Минусы: как allocate может использоваться для любого другого vector<vector<double>>, должно ли оно быть const или нет?

Решение 2: Создать allocate_x (), allocate_y (), allocate_z (), вызовите if (is_x_allocated) allocate_x();

Плюсы: он адаптирован к ситуации, и allocate_x / y / z определенно непостоянны.

Минусы: мне нужно скопировать код распределения 3 раза. Я мог бы сделать некоторые ошибки + код будет сложнее модифицировать, если, например, появится третье измерение.

Как бы вы кодировали это эффективным способом? Может быть, лямбда-функция внутри void allocate () -функции, но я чувствую, что это слишком сильно повлияет на то, чем она является на самом деле ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...