C++ 从另一个 C++ 文件“导入”一个枚举类

And*_*Dev 2 c++ namespaces using

我是 Java 背景的人,所以请多多包涵 :)

我正在尝试enum class从另一个 C++ 文件“导入”(使用 Java 术语)an ,以便能够直接使用它,而不必在它前面加上类名。

例如,假设我在头文件中有这个:

class Foo
{
    public:
        enum class Bar {ITEM_1, ITEM_2};
        void doThings(Bar bar);
};
Run Code Online (Sandbox Code Playgroud)

现在,目前,如果我想Bar从另一个 C++ 文件中使用,我会这样做:

#include "Foo.h"

void Foo2::methodInAnotherFile()
{
    Foo foo();
    Foo::Bar bar = Foo::Bar::ITEM_2;
    foo.doThings(bar);
}

Run Code Online (Sandbox Code Playgroud)

现在我想要做的是能够执行类似的“进口”(使用Java术语)Bar,以便能够删除需要前缀BarFoo::,即做Bar bar = Bar::ITEM_2;

现在,由于我对 C++ 的了解有限,我能想到的一种方法是将所有代码包围在Foo.hwith 中namespace FooNamespace{},将Bar枚举从类中取出(但仍在命名空间中),然后添加using namespace FooNamespaceFoo2班级。但是,对于我的应用程序来说,这确实没有多大逻辑意义,因为Bar枚举确实在逻辑上属于Foo该类。

由于我精通 Java,下面是我想做的 Java 示例:

文件 1:

package org.fooclass;

public class Foo
{
    public static enum Bar
    {
        ITEM_1,
        ITEM_2;
    }

    public void doThings(Bar bar)
    {
        System.out.println("Item: " + bar.toString());
    }
}
Run Code Online (Sandbox Code Playgroud)

文件2:

package org.foo2class;

import org.fooclass.Foo;
import org.fooclass.Foo.Bar; //I want to do THIS in C++

public class Foo2
{
    public void methodInAnotherFile()
    {
        Foo foo = new Foo();

        /*
         * Since I've 'imported' Foo.Bar, I can now
         * use Bar directly instead of having to do this:
         * Foo.Bar bar = Foo.Bar.ITEM2;
         */
        Bar bar = Bar.ITEM_2;

        foo.doThings(bar);
    }
}
Run Code Online (Sandbox Code Playgroud)

Rem*_*eau 5

通过语句使用类型别名using,例如:

#include "Foo.h"

using Bar = Foo::Bar; // <-- here

void Foo2::methodInAnotherFile()
{
    Foo foo;
    Bar bar = Bar::ITEM_2;
    foo.doThings(bar);
}
Run Code Online (Sandbox Code Playgroud)

或者,限制其范围:

#include "Foo.h"

void Foo2::methodInAnotherFile()
{
    using Bar = Foo::Bar; // <-- here
    Foo foo;
    Bar bar = Bar::ITEM_2;
    foo.doThings(bar);
}
Run Code Online (Sandbox Code Playgroud)