我试图让它编译,但是嵌套类有问题。
struct TKey {
char a[2];
};
template<class TKEY, class TOBJ>
struct CHash {
struct TNode {
TKEY Key;
TOBJ Obj;
};
int stuff;
};
template <class TKEY, class... ARGS>
class CNested : public CHash<TKEY, int> {
public:
typedef CNested<ARGS...> TNested;
template<class TKEY1, class... ARGS1>
struct TNodeType {
typedef typename TNested::TNodeType<ARGS1...>::Type Type;
};
template<class TKEY>
struct TNodeType<TKEY> {
typedef TNode Type;
};
CNested() { }
};
// recursive template, tail
template <class TKEY, class TOBJ>
class CNested<TKEY, TOBJ> : public CHash<TKEY, TOBJ> {
public:
CNested() { }
};
int main(int argc, char* argv[])
{
// p should have type of CNested<TKey, TKey, int>::TNode*
CNested<TKey, TKey, TKey, int>::TNodeType<TKey>* p;
return 0;
}
答案 0 :(得分:3)
TNodeType
是依赖模板名称,因此您需要:
typedef typename TNested::template TNodeType<ARGS1...>::Type Type;
^^^^^^^^
同样在嵌套的struct TNodeType
参数TKEY
中,外部TKEY
的参数class CNested
也会出现影响,因此您需要更改为:
template<class TKEY1>
struct TNodeType<TKEY1> {
typedef TNode Type;
};