假设有一个类有几个(例如2个)容器作为私有成员。使用不同类型的begin()
(或at()
)成员函数来访问相应容器的迭代器(或元素)会不会很好?
以下是一个小例子:
class Example
{
private:
std::vector<double> A;
std::vector<double> B;
public:
double& A(std::size_t index) { return A.at(index); }
double& B(std::size_t index) { return B.at(index); }
};
我需要有这样的访问权限,因为有一个类要求容器A中的值,并且还有另一个类要求B的内容。通常,类Example
可能有两个以上容器
这是一个好主意还是有更好的解决方案?
由于
修改
以下是一些其他信息:container A
始终包含一些将传递给不同函数的参数,容器B
保存从已传递容器A
的函数返回的值作为一个论点。其余可能的容器将对可以存储在A
答案 0 :(得分:1)
班级以外的任何事情都关心这些载体的内容吗?如果没有,创建一个成员函数来获取函数指针并将其与向量一起使用。然后你不需要暴露矢量。使用get函数完全暴露内部对象会使得它们变得私有化。
答案 1 :(得分:0)
如果可能有更多,看起来你实际上有某种&#34;列表&#34;容器几乎像你的命名方案A
,B
,...只是枚举它们,这总是你应该使用某种容器的标志。那么也许你真的想要一个std::vector
s的容器?如果它是固定金额,例如:
std::array<std::vector<double>, N> containers;
如果没有修复,那么:
std::vector<std::vector<double>> containers;
然后你可以有一个函数来询问容器的索引,然后是该容器中的索引:
double& get(std::size_t container, std::size_t element) {
return containers[container][element];
}
答案 2 :(得分:0)
听起来你需要这样的访问者。如果不需要修改元素,可以考虑在返回值上放置 const 关键字
const double& getA(std::size_t index) { return A.at(index); }