我的项目中有几个类,其中一些类是其他类的成员。在操作外部类时,我想访问其成员类的一些参数(也可以有自己的成员类)。
我猜这不完全是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);
您将如何访问这些值?
答案 0 :(得分:1)
如果要更改和监视数十个范围,将它们存储在(一个)数组中可能是明智的,并且可以通过索引引用范围。即:
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);