具有相同名称的枚举和类成员函数

无效指针

在我的工作场所执行的特定编码标准中,类中的访问器方法遵循特定的命名约定。对于任何给定的成员变量,getter的名称相同,而setter的前缀为Set请参见下面的示例。

class Foo
{
public:
    int Number() const { return m_number; }
    void SetNumber(int number) { m_number = number; }

private:
    int m_number;
};

当我有一个同名的枚举时,这变得古怪:

enum class Number
{
    One, Two, Three
};

class Foo
{
public:
    Number Number() const { return m_number; }
    void SetNumber(Number number) { m_number = number; }

private:
    Number m_number;
};

上面的示例将无法编译,因为在某些地方,编译器无法确定我是指的是枚举名称还是函数名称。因此,要在不违反编码标准的情况下解决此问题,就必须::在模棱两可的地方使用,而实际上是指枚举:

enum class Number
{
    One, Two, Three
};

class Foo
{
public:
    ::Number Number() const { return m_number; }
    void SetNumber(::Number number) { m_number = number; }

    void DoStuffWithNumber()
    {
        if (m_number == ::Number::One)
        {
            // Do stuff
        }
    }

private:
    Number m_number;
};

这对于代码的读者来说有些混乱,但是在某些情况下必须完全限定枚举名称也有些烦人。并非总是如此。

这里有什么更合理的解决方法?显然,我可以做一些类似将访问器重命名为的操作GetNumber(),但是我很想知道人们还能提出什么其他解决方案。

zhm

您可以添加enum前缀以显式引用枚举类名称,而不是函数名称。

enum class Number
{
    One, Two, Three
};

class Foo
{
public:
    enum Number Number() const { return m_number; }
    void SetNumber(enum Number number) { m_number = number; }

private:
    enum Number m_number; // Number here refers to enum class, not function
};

注意:上面的代码在g ++下可以工作,但是在Visual Studio中有问题。VS似乎不适用于范围枚举。我们可以使用无作用域枚举(无class关键字)来代替。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

基类和派生类中具有相同名称的静态成员变量

如何在Kotlin android中的扩展函数中访问具有相同名称的类成员

C ++从具有相同名称的成员的基类继承

具有相同名称的成员函数C ++

具有相同名称的Java枚举和字段

具有相同名称和参数,不同返回类型的C ++成员函数

您可以在不同的翻译单元中拥有两个具有相同名称和相同成员函数的类吗?

具有相同名称的模块和类

2 个具有相同名称和类的窗口

如何使用C ++ 11 std :: bind绑定类中具有相同名称的成员函数之一

具有相同名称的变量和函数破坏

具有相同名称和成员类型但成员名称不同的结构

如何在具有相同名称成员的对象的构造函数中限定类型名称?

具有相同名称的Javascript函数

类似函数的宏和枚举器具有相同的名称

当类和名称空间具有相同名称时区分类和名称空间

在Swift 3中将类与具有相同名称的实例成员区分开

具有相同名称的枚举值错误

区分类成员和VBA中具有相同名称的参数?

继承具有相同名称空间和相同类名的类

如何在Typescript中为具有相同名称的类和名称空间编写声明

父类和实现接口中具有相同名称的静态和非静态方法

如何执行列和函数输入具有相同名称的函数?

如何重写在多个继承中具有相同名称的基类的虚函数?

如何调用具有与该类相同名称的函数的类的静态方法?

基类中具有相同名称但签名不同的非虚拟函数

父类的私有函数导致子类中具有相同名称和相似参数的公共函数模棱两可的调用

如何别名枚举名称以覆盖具有相同名称的本地命名空间枚举?

一类具有相同名称JAVA的静态和非静态方法