Может быть, я привередлив, но мне хотелось бы узнать ваше мнение о том, как лучше всего написать что-то подобное (моя проблема намного сложнее, но ее можно упростить вот так):
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 ()
-функции, но я чувствую, что это слишком сильно повлияет на то, чем она является на самом деле ...