平时写程序时,总少不了对某个被分装的很好的类中的成员变量进行访问,所以会写一些:
void T::setXxx(Yyy v) {}
Yyy T::getXxx() const
这样的代码,因为T类中有个Yyy类型的xxx成员变量,当有几个这样的成员变量需要写访问函数时,好多的函数定义真是让人烦透了,就算使用提供了方便模板的ide,也令人心烦,所以我有了以下想法,其实现实中的好多项目里早已运用了,这里只是提一下,如下代码:
struct State {
union {
int intV_;
bool boolV_;
char* rawStrV_;
// other members
};
State(const int v) : intV_(v) {}
State(const bool v) : boolV_(v) {}
State(const char* v) : rawStrV_() {}
// other ctors
};
enum StateType{
ST_WINDOWED,
ST_ACTIVED,
ST_WIDTH,
ST_HEIGHT,
ST_VERSION
};
class Renderer {
public:
void setState(StateType st, State v) {
switch(st) {
case ST_WINDOWED:
{ // ...
}break;
case ST_ACTIVED:
{ // ...
}break;
// ...
default: assert(false);
}
}
State getState(StateType st) const {
switch(st) {
default:
case ST_WINDOWED: return windowed_;
case ST_ACTIVED: return actived_;
// ...
}
}
private:
int w;
int h;
char* versionDescription_;
bool windowed_;
bool actived_;
};
非常简单明了!!!
优点:还是有些繁琐,但不用写一堆的函数定义体“{}”,这里只有两对;容易产生高效的代码
缺点:更改代码时,代码改动量较大
可以看出,这一管理策略正好与“状态管理”的接口语义一致,使人感觉非常轻量。