重新定义公共/私有接口的枚举

时间:2012-10-24 13:26:09

标签: c++

如何在方法enum state_t中使用bar::install的成员,而无需在foo的公共类部分重新定义它?小组成员_state必须留下protected

仅仅为成员使用具有类似名称的另一个枚举是一个好主意吗?

class foo
{
protected:
    int         _bla
    volatile enum state_t { _REC, _LIN, _OFF } _state;
public
    volatile enum { REC, LIN, OFF };
    state_t get_state(void) { return _state };
};

在另一个类的方法中:

void bar::install(foo *ptr)
{
    switch(ptr->get_state()) {
        case foo::REC: break;
        case foo::LIN: break;
        case foo::OFF: break;
    }
}

2 个答案:

答案 0 :(得分:3)

不,当你复制你的枚举时,你修改它们会付出额外的努力,你也会遇到与他们的类型相关的错误/警告。我会将state_t公开并通过将其定义分开来保持_state,例如:

class foo
{   
public:
    enum state_t { REC, LIN, OFF };
protected:
    int         _bla
    volatile state_t _state;
public:
    state_t get_state(void) { return _state };
};

答案 1 :(得分:0)

您可以将bar定义为foo

的朋友类