如何在公共头文件中向库的用户公开枚举,同时在内部使用它?
How do I expose an enum to users of my library in a public header file but also use it internally?
如果我正在创建一个公开一个公共头文件的库,该文件可能会接受或返回公开的enum
,我将如何在内部使用该enum
而不在头文件中创建循环依赖项?
例如:
公共.h
#include "Internal.h"
namespace PublicFunctions {
enum Access{
READ,
WRITE,
}
FileObject CreateFileObject(Access a) {
return InternalFunctions::GetFileObject(a);
}
}
内部.h
#include "Public.h"
namespace InternalFunctions {
FileObject GetFileObject(PublicFunctions::Access a);
}
内部.cpp
FileObject InternalFunctions::GetFileObject(PublicFunctions::Access a) {
if (a == PublicFunctions::Read) {
return openreadonly();
}
else {
return openwrite();
}
}
我知道#praga
once预处理器指令,但是有什么方法可以在这些内部文件中转发声明enum
?
还是#pragma
曾经是解决这些依赖关系的最佳方法?
包含守卫无法帮助您,因为如果首先包含 public.h,则库客户端的逻辑案例,您最终会得到
// public.h already included so #include "Public.h" is ignored
namespace InternalFunctions {
FileObject GetFileObject(PublicFunctions::Access a);
// PublicFunctions::Access not defined yet.
}
namespace PublicFunctions {
enum Access{
READ,
WRITE,
}
FileObject CreateFileObject(Access a) {
return InternalFunctions::GetFileObject(a);
}
}
更糟糕的是,任何包含public.h的人都可以窥视internals.h,这违背了将两者分开的意义。
但是如果你从 public.h 中删除CreateFileObject
的实现,你可以
namespace PublicFunctions {
enum Access{
READ,
WRITE,
}
FileObject CreateFileObject(Access a);
}
并留下内部.h。它将由编译的库独占使用,不随公共接口一起提供。
#include "Public.h"
namespace InternalFunctions {
FileObject GetFileObject(PublicFunctions::Access a);
}
,然后是内部.cpp
#include "internal.h"
FileObject InternalFunctions::GetFileObject(PublicFunctions::Access a) {
if (a == PublicFunctions::Read) {
return openreadonly();
}
else {
return openwrite();
}
}
最后是公开的.cpp
#include "internal.h"
FileObject PublicFunctions::CreateFileObject(Access a) {
return InternalFunctions::GetFileObject(a);
}
是否值得将公共.cpp和内部分开.cpp取决于程序员及其编码标准。
相关文章:
- 访问在 C++ 结构中声明的枚举变量
- 为什么我的开关/机箱在使用枚举时默认?
- 如何在公共头文件中向库的用户公开枚举,同时在内部使用它?
- 如何理解c++中在命名空间内部定义的枚举类型enum
- 在模板类内部定义的枚举上的嵌套类的部分专用化
- 类中的枚举在调用自己的函数时不会改变
- 枚举在构造函数和班级中被调用
- 枚举在Windows上具有意想不到的价值,但在Linux上没有
- 如何告诉Borland C 枚举在班级内
- 访问在 C++ 函数内部的结构中定义的枚举类属性
- 关键字枚举在 C++ 中启动函数定义
- 在类内部的结构中定义枚举
- 枚举在内部作为整数实现.那为什么会给出错误
- 这个枚举在析构函数中的用途是什么
- 许多枚举在同一类中具有相同的成员
- 在类外部使用在类内部声明的类型定义枚举
- c++:在类内部从外部声明枚举器,以便可以在私有成员中使用
- 如何枚举在min和max之间的所有浮点值
- 将枚举(在结构体内部声明的)值赋给结构体内部相同枚举类型的变量
- 枚举在C和c++中的用途是什么?