我有以下简化,这有效:
// 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;
};
但这不起作用
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?
};
在实际代码中,List 模板接收更多模板参数并定义了一个额外的类 Iterator,问题是¿为什么不工作,我做错了什么?
哦,不,是 IDE 问题!
扫描嵌套模板参数时 Eclipse CDT/代码分析误报。
感谢您的回答。