【发布时间】:2021-04-19 09:22:56
【问题描述】:
假设我有以下课程
class Foo {
public:
// ...
private:
std::unordered_map<std::string, int> param1;
std::vector<int> param2;
// And other complex data types
};
并且想从外部函数访问其实例的私有成员,我是否可以定义一个常量引用结构来一次传递它们,而不是为每个对象创建一个 getter 并传递一个“动物园”参数?
struct params_t {
const std::unordered_map<std::string, int> ¶m1;
const std::vector<int> ¶m2;
};
params_t Foo::get_params() { return params_t{param1, param2}; }
void bar()
{
// Initialize an instance of Foo
params_t params = foo.get_params();
// Do something with params
}
这被认为是一种好习惯吗?因为就我而言,我的需求是特定的:我一次需要所有参数,而且我经常需要它们,所以我的目标是效率和低内存使用,而不是代码风格。
【问题讨论】:
-
在
Foo内嵌套params_t似乎是解决这个特定问题的最佳做法。 -
你可以声明一个“友元函数”,所以这个函数可以访问类的所有成员。