Я пришла из Java, поэтому, пожалуйста, потерпите меня:)
Я пытаюсь «импортировать» (используя терминологию Java) enum class
из другого файла C ++, чтобы иметь возможность использовать его напрямую, без префикса имени класса.
Так, например, допустим, у меня есть это в заголовочном файле:
class Foo
{
public:
enum class Bar {ITEM_1, ITEM_2};
void doThings(Bar bar);
};
Теперь, если я хочу использовать Bar
из другого файла C ++, я делаю это:
#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);
}
}