我有類似以下內容:覆蓋類成員的值不改變實際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
(可憐的我)
何男孩........ –