包含没有函数的常量
Including constants without functions
我正在制作一个 C++ 库,我想在 header 中包含 fcntl.h(用于权限常量)
但我有一个名为 open 的函数,参数列表包含 类 可以转换为 fcntl 的开放参数列表类型。
这意味着当我使用 #include<fcntl.h>
时出现了一个不明确的错误。
我希望图书馆尽可能便携。
我想将名称从 open 更改为 Open,但有更好的解决方案吗?
就像在不解析函数的情况下包含 header(例如,只包含常量)。
is there a better solution?
使用命名空间:
namespace my_lib {
int open(const char *pathname, int flags);
}
需要明确的是,库应该始终在命名空间中声明其 functions/classes/constants/etc...,而不仅仅是作为解决特定问题的手段。这样,您就可以避免与用户可能包含但您看不到的其他库发生潜在冲突。
编辑: 从评论的后续内容来看,如果用命名空间作为前缀很烦人,您可以在本地使用命名空间中的单个标识符,这样就不会产生歧义,也不会在代码的其他地方引起冲突。
#include <fcntl.h>
namespace my_lib {
int open(const char *pathname, int flags);
}
void foo() {
using my_lib::open;
open("aaa", 0);
}
你应该永远不要求助于using namespace my_lib
。然而,如果你被画在一个角落里(例如 using namespace
在你不能更改的代码中),你可以通过显式引用不明确符号的命名空间来解决冲突。
#include <fcntl.h>
namespace my_lib {
void bar();
int open(const char *pathname, int flags);
}
using namespace my_lib;
void foo() {
bar();
// use the open() from fcntl.h
::open("aaa", 0);
// Use the open() from my_lib
::my_lib::open("aaa", 0);
}
我正在制作一个 C++ 库,我想在 header 中包含 fcntl.h(用于权限常量)
但我有一个名为 open 的函数,参数列表包含 类 可以转换为 fcntl 的开放参数列表类型。
这意味着当我使用 #include<fcntl.h>
时出现了一个不明确的错误。
我希望图书馆尽可能便携。
我想将名称从 open 更改为 Open,但有更好的解决方案吗?
就像在不解析函数的情况下包含 header(例如,只包含常量)。
is there a better solution?
使用命名空间:
namespace my_lib {
int open(const char *pathname, int flags);
}
需要明确的是,库应该始终在命名空间中声明其 functions/classes/constants/etc...,而不仅仅是作为解决特定问题的手段。这样,您就可以避免与用户可能包含但您看不到的其他库发生潜在冲突。
编辑: 从评论的后续内容来看,如果用命名空间作为前缀很烦人,您可以在本地使用命名空间中的单个标识符,这样就不会产生歧义,也不会在代码的其他地方引起冲突。
#include <fcntl.h>
namespace my_lib {
int open(const char *pathname, int flags);
}
void foo() {
using my_lib::open;
open("aaa", 0);
}
你应该永远不要求助于using namespace my_lib
。然而,如果你被画在一个角落里(例如 using namespace
在你不能更改的代码中),你可以通过显式引用不明确符号的命名空间来解决冲突。
#include <fcntl.h>
namespace my_lib {
void bar();
int open(const char *pathname, int flags);
}
using namespace my_lib;
void foo() {
bar();
// use the open() from fcntl.h
::open("aaa", 0);
// Use the open() from my_lib
::my_lib::open("aaa", 0);
}