如果答案是肯定的,你能告诉我为什么吗?这是一个例子:
namespace urx {
struct reserved { };
struct side { urx::reserved reserved() { /*...*/ } };
}
int main() {
urx::side side;
side.reserved();
}
reserved
用于类型名称和函数名称。
side
用于类型名称和变量名称。
但在这两种情况下,它们都由urx
命名空间分隔,我总是明确指定urx
来引用类型名称(为了便于阅读)。
答案 0 :(得分:2)
我不明白为什么会这么糟糕。我想我宁愿用好名字命名我的成员函数,而不是发明难以记住的人工名称来消除它们的歧义。
编写了一些编码指南,以便不会发生这种情况。通过强制类型以大写字母开头,并使用小写字母等函数。
您应该避免根据常用模板名称调用您的成员函数。根据当前的C ++标准,以下程序是不正确的,尽管有些编译器倾向于(为了好处)忽略该错误。 Clang和comeau发出警告
#include <vector>
using namespace std;
struct A {
template<typename T>
T vector();
};
int main() {
A a;
a.vector<int>(); // ill-formed!
}
"ComeauTest.c", line 11: warning: ambiguous class member reference -- function template "A::vector" (declared at line 6) used in preference to class template "std::vector" (declared at line 163 of "stl_vector.h") a.vector(); // ill-formed! ^
It has been proposed摆脱这个。