我来自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 ++的了解有限,因此可以想到的一种方法是将Foo.h
中的所有代码都用namespace FooNamespace{}
包围,将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);
}
}
答案 0 :(得分:2)
通过using
语句使用type alias,例如:
#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);
}