在模板中,在哪里以及为什么我必须将typename
和template
放在依赖名称上?
到底什么是依赖名?
我有以下代码:
template <typename T, typename Tail> // Tail will be a UnionNode too.struct UnionNode : public Tail {// ...template<typename U> struct inUnion {// Q: where to add typename/template here?typedef Tail::inUnion<U> dummy;};template< > struct inUnion<T> {};};template <typename T> // For the last node Tn.struct UnionNode<T, void> {// ...template<typename U> struct inUnion {char fail[ -2 + (sizeof(U)%2) ]; // Cannot be instantiated for any U};template< > struct inUnion<T> {};};
我遇到的问题是在typedef Tail::inUnion<U> dummy
行。我相当确定inUnion
是一个依赖名称,VC++在窒息上是完全正确的。
我还知道我应该能够在某处添加template
来告诉编译器inUnion是一个模板ID。但是具体在哪里?然后它是否应该假设inUnion是一个类模板,即inUnion<U>
命名一个类型而不是一个函数?