C++ "Importing" 来自另一个 C++ 文件的枚举 class
C++ "Importing" an enum class from another C++ file
我来自 Java 背景所以请多多包涵 :)
我正在尝试 "import"(使用 Java 术语)来自另一个 C++ 文件的 enum class
,以便能够直接使用它而不必在其前面添加前缀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);
}
现在我想做的是能够做类似 "import" 的事情(使用 Java 术语)Bar
以便能够消除需要在 Bar
前加上 Foo::
,即 Bar bar = Bar::ITEM_2;
.
现在,由于我对 C++ 的了解有限,我能想到的一种方法是用 namespace FooNamespace{}
包围 Foo.h
中的所有代码,采用 Bar
枚举在 class 之外(但仍在命名空间中),然后将 using namespace FooNamespace
添加到 Foo2
class 的顶部。但是,对于我的应用程序来说,这确实没有多大逻辑意义,因为 Bar
枚举在逻辑上确实属于 Foo
class.
由于我精通 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
语句使用 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);
}
我来自 Java 背景所以请多多包涵 :)
我正在尝试 "import"(使用 Java 术语)来自另一个 C++ 文件的 enum class
,以便能够直接使用它而不必在其前面添加前缀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);
}
现在我想做的是能够做类似 "import" 的事情(使用 Java 术语)Bar
以便能够消除需要在 Bar
前加上 Foo::
,即 Bar bar = Bar::ITEM_2;
.
现在,由于我对 C++ 的了解有限,我能想到的一种方法是用 namespace FooNamespace{}
包围 Foo.h
中的所有代码,采用 Bar
枚举在 class 之外(但仍在命名空间中),然后将 using namespace FooNamespace
添加到 Foo2
class 的顶部。但是,对于我的应用程序来说,这确实没有多大逻辑意义,因为 Bar
枚举在逻辑上确实属于 Foo
class.
由于我精通 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
语句使用 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);
}