问题描述
我有以下包含简单成员变量和基本构造函数的类:
struct SimpleStruct {
SimpleStruct() = default;
SimpleStruct(const int& a,const int &b,const double& c,const double& d,const double& e) :
A(a),B(b),C(c),D(d),E(e) {}
int A,B;
double C,D,E;
// etc.. more properties could be added or removed to this class
};
我想考虑SimpleStruct
的集合,因此决定创建一个包装器类。我可以看到两个基本选项:
class WrapperOne {
public:
Wrapper(const size_t& sz) {
SS.resize(sz);
nElements = 0;
}
void Push(const SimpleStruct& ss) { SS[nElements++] = ss; }
std::vector<int> getA() const {
std::vector<int> result(SS.size());
for (size_t i = 0; i < SS.size(); ++i)
result[i] = SS[i].A;
return result;
}
// std::vector<int> getB() ... etc. for the remaining SimpleStruct member variables
private:
std::vector<SimpleStruct> SS;
size_t nElements;
};
或
class WrapperTwo {
public:
WrapperTwo(const size_t& sz) {
As.resize(sz);
Bs.resize(sz);
Cs.resize(sz);
// etc.
nElements = 0;
}
void Push(const SimpleStruct& SS) {
As[nElements] = SS.A;
Bs[nElements] = SS.B;
Cs[nElements] = SS.C;
// etc
nElements++;
}
std::vector<int> getA() const { return As; }
// etc.
private:
std::vector<int> As;
std::vector<int> Bs;
std::vector<double> Cs;
size_t nElements;
};
如果添加或删除WrapperOne
的成员,则 SimpleStruct
的维护会容易得多。但是,假设我们要考虑大量SimpleStruct
的集合:
// ...
WrapperOne SSCollection1(10000000);
WrapperTwo SSCollection2(10000000);
// ...
如果两个类都已完全实现,则它们应该需要相同数量的内存(?)。但是,假设我们不需要查看所有A,B,C,E
,而只需要例如A
和B
。然后在WrapperTwo
中,我们只需避免为C,E
添加向量并节省内存。
在运行时是否有任何方法可以定义SimpleStruct
可以使用的WrapperOne
类的“子集”?还是我需要使WrapperOne
成为模板类,然后定义一堆SimpleStruct
变体,这些变体指定我可能想要收集的成员变量的不同组合?还是我会坚持使用WrapperTwo
并根据自己的用例不断在代码行的注释/注释掉。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)