从另一个C++文件中C++ "Importing"枚举类

C++ "Importing" an enum class from another C++ file

本文关键字:C++ Importing 枚举 另一个 文件      更新时间:2023-10-16

我来自Java背景,所以请耐心等待:)

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

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

class Foo
{
public:
enum class Bar {ITEM_1, ITEM_2};
void doThings(Bar bar);
};

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

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

现在我想做的是能够做一些类似"导入"(使用 Java 术语)Bar以便能够消除在Bar前面加上Foo::的需要,即做Bar bar = Bar::ITEM_2;

现在,以我对C++的有限了解,我能想到的一种方法是用namespace FooNamespace{}包围Foo.h中的所有代码,将Bar枚举从类中取出(但仍在命名空间中),然后将using namespace FooNamespace添加到Foo2类的顶部。但是,对于我的应用程序来说,这真的没有多大逻辑意义,因为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());
}
}

文件 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);
}
}

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

#include "Foo.h"
using Bar = Foo::Bar; // <-- here
void Foo2::methodInAnotherFile()
{
Foo foo;
Bar bar = Bar::ITEM_2;
foo.doThings(bar);
}

或者,要限制其范围:

#include "Foo.h"
void Foo2::methodInAnotherFile()
{
using Bar = Foo::Bar; // <-- here
Foo foo;
Bar bar = Bar::ITEM_2;
foo.doThings(bar);
}