【发布时间】:2016-01-04 19:54:06
【问题描述】:
我的问题很简单。执行以下操作是否安全?
不需要任何道德建议,例如“不要将函数命名为 swap()!”或者别的什么,拜托!
file1.hpp
//header guards here
#include <utility> //includes std::swap and std::move
namespace foo
{
template<typename T>
inline void swap(T& lhs, T& rhs)
{
T temp = std::move(lhs);
lhs = std::move(rhs);
rhs = std::move(temp);
}
}
file2.cpp
#include "file1.hpp"
namespace foo
{
template<typename T>
void myfun(T a, T b)
{
a += b;
swap(a, b); //does it imply foo::swap, because the function
//is declared in the foo namespace??
}
}
【问题讨论】:
-
参数依赖查找没有效果,你的模板太贪心了。
-
@DieterLucking 你是说我应该说使用 foo::swap;在功能中使其更加慈善?
-
你为什么不简单地用
std::cout << "Hello world"语句测试它? -
@DeiDei 您在命名空间 foo 中 - 因此选择了贪婪的 foo::swap。
-
@LightnessRacesInOrbit 问题是,我有一个更大的代码库。有时我会得到“对函数的调用不明确”,这是通过在其前面添加命名空间范围来解决的。在我假设项目结构中存在其他问题之前,我想确保这是正确的。
标签: c++ c++11 namespaces