C++ 不明确类型引用
为什么这样做有效:C++ 不明确类型引用,c++,templates,typedef,multiple-inheritance,C++,Templates,Typedef,Multiple Inheritance,为什么这样做有效: template <typename T> struct foo { }; struct A { typedef foo<A> type; }; struct B : public A { typedef foo<B> type; }; int main() { B::type john; return 0; } 模板 结构foo { }; 结构A { typedef-foo型; }; 结构B:公共
template <typename T>
struct foo
{
};
struct A
{
typedef foo<A> type;
};
struct B : public A
{
typedef foo<B> type;
};
int main()
{
B::type john;
return 0;
}
模板
结构foo
{
};
结构A
{
typedef-foo型;
};
结构B:公共A
{
typedef-foo型;
};
int main()
{
B::约翰型;
返回0;
}
但不是这个:
template <typename T>
struct foo
{
};
template <typename T>
struct Shared
{
typedef foo<T> type;
};
struct A : public Shared<A>
{
};
struct B : public A, public Shared<B>
{
};
int main()
{
// g++ 4.5 says :
// error: reference to 'type' is ambiguous
B::type john;
return 0;
}
模板
结构foo
{
};
样板
结构共享
{
typedef-foo型;
};
结构A:公共共享
{
};
结构B:公共A,公共共享
{
};
int main()
{
//g++4.5说:
//错误:对“类型”的引用不明确
B::约翰型;
返回0;
}
在我的代码中,
foo
实际上是boost::shared_ptr
,正如您所看到的,我正在尝试使用shared
类来计算一些typedef
。因为您实际上有两个type
typedef。一个来自A
,从shared
获取他的信息,另一个来自shared
。在第一种情况下,使用B
中的typedef隐藏A
基类的type
typedef,因为实际上有2个type
typedef。一个来自A
,从shared
获取他的信息,另一个来自shared
。在第一种情况下,使用B
中的typedef隐藏A
基类的type
typedef,因为B
继承foo
,并间接继承foo
,两者都包含成员type
。你是什么意思
简单的第一段代码有
B
类型隐藏A
类型但在更复杂的第二段代码中没有这种情况,这涉及到一个更深的继承树。因为B
继承foo
,并且间接地继承foo
,并且都包含一个成员类型
。你是什么意思
简单的第一段代码有B
类型隐藏A
类型但在更复杂的第二段代码中不会发生这种情况,这涉及到更深层的继承树。因为,您指的是哪种B::类型,B::A::Shared::type还是B::Shared::type,它们不一样。。。在第一个示例中,您指定的是您正在谈论的类型,因为它实际上是在B类中定义的,因为,您引用的是哪种B::类型,B::A::Shared::type或B::Shared::type,它们不相同。。。在第一个示例中,您指定了您所谈论的类型,因为它实际上是在B类中定义的