使用模式将名称移至另一个名称空间?
-
29-09-2019 - |
题
给定:
namespace One {
void foo(int x) {
munch(x + 1);
}
};
namespace Two {
// ... see later
}
...
void somewhere() {
using namespace Two;
foo(42);
...
以下两个变体之间是否有任何区别:
一种)
namespace Two {
void foo(int x) {
munch(x + 1);
}
};
和b)
namespace Two {
using One::foo;
};
编辑:很明显,(a)复制代码,这绝不是一个好主意。问题更多是关于超负荷分辨率等...如果还有其他 foo
S或 munch
在其他名称空间中?
解决方案
对于A,它们实际上是不同的功能,但是对于B,这两个函数是相同的:
assert(&One::foo == &Two::foo);
这很少重要。更大的关注点是重复逻辑。
其他提示
至于用法,它们是等效的。至于代码,如果a)您正在重复该功能 foo()
代码。也就是说,这两个版本都可以提供 foo()
内部功能 Two
, ,但是a)案例生成了代码 foo
两次,因为编译器没有任何暗示发现它是相同的功能。
不隶属于 StackOverflow