C++ 重写类成员值而不更改实际实现
我的课程如下:C++ 重写类成员值而不更改实际实现,c++,design-patterns,C++,Design Patterns,我的课程如下: class SignalProcessor { //.... bool memberBool; uint32_t memberUint32; int memberArray[10]; //... float memberfloat; }; 信号处理器的实现是针对一个控制系统,带有一些复杂的算法 现在,为了诊断/调试的目的,我必须用来自另一个应用程序的一些其他值覆盖这些成员值中的一些 一种方法是使用一堆#ifdef或如果。。。else..代码中的每个位
class SignalProcessor
{
//....
bool memberBool;
uint32_t memberUint32;
int memberArray[10];
//...
float memberfloat;
};
信号处理器
的实现是针对一个控制系统,带有一些复杂的算法
现在,为了诊断/调试的目的,我必须用来自另一个应用程序的一些其他值覆盖这些成员值中的一些
一种方法是使用一堆#ifdef
或如果。。。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;
}
我对任何其他设计/解决方案都持开放态度,除了我不想在多个源文件中浏览每个地方,并且做if…else…
我只能使用
C++98
(可怜的我)您的第一个任务是实际了解“如何从其他应用程序分配值”,因为在您完成之前,整个问题都是毫无意义的
但是,假设你可以像现在这样命名一个对象,#ifdef
确实是实现这一点的常规方法<代码>如果将造成更严重的混乱,并对运行时造成损害。这是你唯一的真正选项(没有一些超级大的魔术类层次结构,完全不可读的模板元),因为C++不支持数据成员的重写。
所以只要用#ifdef
就可以了
如果你发现你有太多的地方可以写#ifdef
,也许这是一个迹象:
- 这种“模式”太普遍了,实际上应该是一个单独的应用程序,或者
- 您的类没有正确地相互隔离
struct Values1
{
bool memberBool;
uint32_t memberUint32;
};
struct Values2
{
int memberArray[10];
};