我正在尝试编译它,但嵌套类遇到问题。
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;
}
最佳答案
TNodeType
是一个依赖模板名称,因此您需要:
typedef typename TNested::template TNodeType<ARGS1...>::Type Type;
^^^^^^^^
还在嵌套结构TNodeType
参数TKEY
中隐藏外部类CNested
的参数TKEY
,所以你需要更改为:
template<class TKEY1>
struct TNodeType<TKEY1> {
typedef TNode Type;
};
关于c++ - 具有嵌套类的可变长度参数模板类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34007013/