【发布时间】:2018-05-14 05:40:06
【问题描述】:
我的项目中有几个类,其中一些类是其他类的成员。在操作外部类时,我想访问其成员类的一些参数(它们也可以有自己的成员类)。
我猜这并不是 C++ 中的“嵌套类”,因为嵌套类是在外部类的声明中声明的。那么嵌套类可能无法从外部类的外部访问(对我来说只是一条信息,以确保我不写垃圾)。
假设我有一个 AnalogSensor 类(处理真实模拟传感器的行为)。此类可能有多个处理程序(一个用于处理 ADC 请求,一个用于过滤传入数据,一个用于数据处理,最后一个用于死区管理)。
class LinearSpace {
public:
// Getters & setters
private:
uint16_t min_val; // I'm working with embedded devices
uint16_t max_val; // Those are values used for linear interpolations
// purposes
};
class DataHandler {
public:
// Some useful methods
uint8_t map_raw_data(); // Converts the mapped adc_result (10 bits)
// value into an 8-bit, interpolated value
private:
LinearSpace input_space; // Two values spaces used for interpolation
// purposes
LinearSpace output_space;
};
class AnalogSensor{
public:
// "High-Level" methods like void send_adc_request(void);
// which relies on the internal ADC hander
private :
AdcHandler adc_handler;
DataHandler data_handler;
Deadzone deadzone;
DataFilter data_filter;
};
每个处理程序都可能依赖(或不依赖)其他子类,例如具有自己的 getter 和 setter(getmin、getmax、setmin 和 setmax)的值范围(最小值、最大值)。
这是我可以在项目中结束的示例:
AnalogSensor mysensor
|
- dataHandler data_handler
|
- LinearSpace input_space
| |
| - min_val
| |
| - max_val
|
- LinearSpace output_space
|
- min_val
|
- max_val
好吧,现在假设我想修改给定范围的最小值和最大值,直接来自 AnalogSensor 类。我应该怎么做?
此要求来自对每个校准过程(在运行时)调整这些值的必要性,因为电压和电子测量可能会随时间/外部条件(例如湿度等)而变化。
我在网上找到了很多想法:
- 将一个类声明为朋友(AnalogSensor 是 AdcHandler 和 dataFilter 等...)
- 在 AnalogSensor 中声明尽可能多的 getter 和 setter,它们专用于一个特定的范围(会有几十个,我认为这很脏)。
- 或者使用指针访问我想要修改的确切 valueRange(没有 我希望打破封装)直接来自 AnalogSensor 类。
在这种特殊情况下,我可以这样做:
mysensor.getDataHandlerPointer()->getInputSpacePointer()->set_min(my_new_value);
您将如何访问这些值?
【问题讨论】:
-
你如何解释为什么你(我引用)“想要直接从 AnalogSensor 类修改给定范围的最小值和最大值。”。是否需要这样做取决于 AnalogSensor 类需要做什么。如果没有这种解释,就没有上下文可以建议您构建班级的方式是否合适,或者您想要设置成员的方式是否有意义 - 更不用说就合适的方法提供建议了。
-
实际上,我仍在为我的课程寻找更好的结构。我的边界可能会随时间而变化(测量中的噪声、校准等)。这可能会导致 AnalogSensor 无法达到其范围的限制,然后我想确保我可以在运行时调整和调整这些限制。也许不需要专门的处理程序来做到这一点,对我来说直接在 AnalogSensor 的主体中实现它会容易得多。
标签: c++ class pointers methods