C++ C++;(gcc)嵌套模板问题?
我有以下简化,这是可行的:C++ C++;(gcc)嵌套模板问题?,c++,templates,C++,Templates,我有以下简化,这是可行的: // works: template<typename NodeStructure> struct ListNode { NodeStructure *prev, *next; }; template<typename NodeStructure, ListNode<NodeStructure> NodeStructure::*node> struct ListBase { NodeStructure *head,
// works:
template<typename NodeStructure>
struct ListNode {
NodeStructure *prev, *next;
};
template<typename NodeStructure, ListNode<NodeStructure> NodeStructure::*node>
struct ListBase {
NodeStructure *head, *tail;
};
struct N {
ListNode<N> node;
};
struct B {
ListBase<N, &N::node> base;
};
//工作原理:
模板
结构列表节点{
节点结构*prev,*next;
};
模板
结构列表库{
节点结构*头,*尾;
};
结构{
列表节点;
};
结构B{
ListBase;
};
但这不起作用
template<typename NodeStructure>
struct List {
struct Node {
NodeStructure *prev, *next;
};
template<Node NodeStructure::*node>
struct Base {
NodeStructure *head, *tail;
};
};
struct N {
List<N>::Node node;
};
struct B {
List<N>::Base<&N::node> base; // ERROR: Invalid template argument, ¿why?
};
模板
结构列表{
结构节点{
节点结构*prev,*next;
};
模板
结构基{
节点结构*头,*尾;
};
};
结构{
列表::节点;
};
结构B{
List::Base;//错误:模板参数无效,为什么?
};
在实际代码中,列表模板接收更多的模板参数并定义一个额外的类迭代器,问题是?为什么不工作,我做错了什么
哦,不,这是一个IDE问题 Eclipse CDT/代码分析在扫描嵌套模板参数时出现误报。
感谢您的回答。eclipse CDT在检测代码分析错误时会破坏建筑物。 解决方案:代码分析的无效模板参数已被禁用,并报告了错误
List::Node
节点不是类模板,这是打字错误吗<代码>列表::节点列表::节点
-该
看起来是多余的,请尝试删除它。您没有使用成员函数调用模板,但这正是它期望得到的结果。@Dave它期望得到一个成员指针,而它得到了一个。您得到了什么错误?如果像其他人建议的那样删除
,ideone将顺利编译。