我的节目越多,我越喜欢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,或者自己编写?