我有类似以下内容:覆盖类成员的值不改变实际implemetation
class SignalProcessor
{
//....
bool memberBool;
uint32_t memberUint32;
int memberArray[10];
//...
float memberfloat;
};
SignalProcessor
实现是一个控制系统,具有一定的复杂算法。
现在我要重写与一些其它值从另一个应用程序来为诊断/调试目的那些部件值的一些。
一种方法是将代码中的每个地方的整个实现与#ifdef
或if... else..
一起弄脏。
所以我很好奇,如果我只能在SignalProcessor标头中做任何事情来覆盖这些值,像下面的东西。
SignalOverride< bool, true > memberBool;
SignalOverride< uint32_t, false> memberUint32;
SignalOverride< int, true> memberArray[10];
// SignalOverride
template <typename T, bool overrideOn >
class SignalOverride
{
T operator=(const T& value)
{
if(!overrideOn)
{
m_signal = value;
}
else
{
/* m_signal = ???
Not entirely sure how to assign values here from other application.
*/
}
return *this;
}
operator T() const
{
return m_signal ;
}
// ...
private:
T m_signal;
}
其他应用程序在几个C结构中有相同的信号名称,如下所示,如果override选项为true,我将不得不使用它。
struct Values1
{
bool memberBool;
uint32_t memberUint32;
};
struct Values2
{
int memberArray[10];
};
我愿意接受任何其他的设计/解决方案,但我不想去通过每个地方在几个源文件,做if...else...
我只能用C++98
(可怜的我)
何男孩........ –