我的项目中有几个类,其中一些类是其他类的成员。在操作外部类的同时,我想访问其成员类(也可以有自己的成员类)的一些参数。
我想这不完全是 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 类修改给定范围的最小值和最大值。我应该怎么做?
这个要求来自于为每个校准过程(在运行时)调整这些值的必要性,因为电压和电子测量可能会随着时间/外部条件(如湿度等)而变化。
我在网上找到了很多想法:
在这种特殊情况下,我可以这样做:
mysensor.getDataHandlerPointer()->getInputSpacePointer()->set_min(my_new_value);
您将如何访问这些值?
如果您有数十个范围要更改和监视,最好将它们存储在(一个)数组中,并通过索引引用这些范围。IE:
struct my_s
{
enum RangeSpace { input_space, output_space, N_SPACES };
void setRange(RangeSpace id, int min, int max) { spaces_[id].setMinMax(min, max); }
// etc...
private:
LinearSpace spaces_[N_SPACES];
};
在调用时使用常量时,这种索引将得到很好的优化,如下所示:
//...
my_s s;
int a = 0, b = 0;
//...
s.setRange(my_s::input_space, a, b);
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句