关于使用精心设计的类型说明符来避免通过setter函数隐藏

时间:2015-11-11 19:45:32

标签: c++ enums

我的节目越多,我越喜欢snake_case而越CamelCase。有一个特别的不便让我感到恼火:我不喜欢getter从get_前缀开始,但是在使用snake_case时如果没有一些额外的工作,这并不总是可行的。例如,考虑在enum内定义的class类型成员的getter,

class bar
{
public:
    enum class foo { a, b };
    foo foo() const { return m_foo; }
    void set_foo(foo new_foo) { m_foo = new_foo; }
private:
    foo m_foo;
};

这不会编译,因为(如果我理解正确的话)enum foo隐藏在setter new_foo参数类型和私有m_foo成员声明之前的{ {1}} getter声明。明显的解决方法是将吸气剂命名为foo(),但正如我所说,我不喜欢它。

当我与Clang编译时,它建议另一个"解决方法":

get_foo

error: must use 'enum' tag to refer to type 'foo' in this scope void set_foo(foo new_foo) { m_foo = new_foo; } ^ enum 成员相同。以下代码确实编译好

m_foo

看起来elaborated type specifiers甚至应该解决这类问题:

  

详细说明的类型说明符可用于表示a   先前声明的类名(类,结构或联合)或a   以前声明的枚举名称,即使名称被a隐藏   非类型声明。

但这不是滥用语言功能吗?您是否在使用snake_case的库中看到过类似的内容,例如标准库或Boost,或者自己编写?

0 个答案:

没有答案