C++ 如何以相同的方式最好地修改一组成员对象?
也许我太挑剔了,但我想听听你对如何最好地编写这样的代码的看法(我的问题要复杂得多,但可以这样简化):C++ 如何以相同的方式最好地修改一组成员对象?,c++,object,C++,Object,也许我太挑剔了,但我想听听你对如何最好地编写这样的代码的看法(我的问题要复杂得多,但可以这样简化): A类 { 公众: A(); A(常数大小dim0,常数大小dim1); 已分配无效集(const bool); 已分配无效集(常量布尔); 已分配无效集(const bool); 私人: 无效分配(向量和)常量?? 尺寸为0; 尺寸(dim1); bool是分配的; bool已分配; bool是分配的; 向量x; 向量y; 向量z; }; 当给定维度时,我希望以相同的方式分配x、y、z(取决于
A类
{
公众:
A();
A(常数大小dim0,常数大小dim1);
已分配无效集(const bool);
已分配无效集(常量布尔);
已分配无效集(const bool);
私人:
无效分配(向量和)常量??
尺寸为0;
尺寸(dim1);
bool是分配的;
bool已分配;
bool是分配的;
向量x;
向量y;
向量z;
};
当给定维度时,我希望以相同的方式分配x、y、z(取决于布尔值的设置方式)。我目前的解决方案是:
解决方案1:创建一个如上所述的分配函数,并调用if(is_x_分配)allocate(x)代码>等
优点:x、y、z将以相同的方式分配->更容易发现错误,以便在将来出现第三维度时修改代码
缺点:as allocate可用于任何其他向量
,是否为常量
解决方案2:创建一个allocate_x(),allocate_y(),allocate_z(),调用if(is_x_u-allocated)allocate_x()代码>
优点:它适应了形势,x/y/z绝对是非常数的
缺点:我必须复制分配代码3次。我可能会犯一些错误+例如,如果第三维度出现,代码修改将更加复杂
您将如何以有效的方式编写此代码?可能是void allocate()
函数中的lambda函数,但我觉得这会使它的实际功能变得太重要了 std::数组m_xyz代码>+循环或索引分配是什么意思?按照new
和delete
中的方式分配内存?或者将数据推送到向量中?就像new
和delete
,更准确地说是resize
,对于向量/数组使用dim0和dim1。我们有非常大的数据,这就是为什么如果我们需要一个表,我们只想分配一个表,而不是全部三个表。使用解决方案1有什么错?这似乎根本不是一个矛盾点,你不确定是否使用const。
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;
};