[英]Nested class and member function with same name
我发现自己有一个嵌套类和一个具有相同名称的成员函数。 成员函数旨在返回嵌套类的实例:
class Foo
{
public:
class Lock
{
// Operations that require the lock...
};
Lock Lock() noexcept {return Lock;}
};
这可以理解为没有用,所以我正在寻找解决方法并尝试:
return typename Foo::Lock();
这在g ++ 4.7和4.8上工作得很好但是当在clang ++ 3.4上运行时我得到错误:
没有c ++ 11: error: typename specifier refers to non-type member 'Lock' in 'Foo'
使用c ++ 11: 'error: typename specifier refers to non-type member 'Lock' in 'Foo'
这引出了我的问题:
我建议反对它,因为它只会让代码真的难以阅读。 但是如果你真的想要继续,你必须使用class
关键字为嵌套类添加前缀。 如果语法无效,请使用typedef:
class Foo
{
public:
class Lock
{
// Operations that require the lock...
};
class Lock Lock() noexcept {
typedef class Lock cLock;
return cLock();
}
};
至于错误,clang在这个上是正确的。 你不能像这样使用typename
来消除歧义,我认为它根本不应该在模板之外使用。
标准参考:
C++11[class.name]§4
指定Lock
如何隐藏class Lock
以及如何将其作为class Lock
进行访问。
C++11[class.name]§2
声明:
如果在声明了同名变量,函数或枚举器的作用域中声明了类名,那么当两个声明都在作用域中时,只能使用elaborated-type-specifier引用该类。
详细类型说明符是class X
表单。 请注意,这意味着typename Foo::Lock
不是引用它的有效方式。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.