无法专门化 fnc
有了这些:
template<class T>
struct Is_Node
{
enum {value = false};
};
template<class Key_T, class Value_T>
class Node;//frwd decl.
template<class K,class V>
struct Is_Node<Node<K,V>>
{
enum {value = true};
};
enum Tags {tree_tag,node_tag,root_tag,parent_tag,left_tag,right_tag,key_tag,value_tag,color_tag};
template<Tags>
struct Tag_2_Type
{/*eb*/};
template<class Node_T>
typename Node_T::node_ptr& get_root(Node_T& node)
{
return get_root_hlp(node,Tag_2_Type<Is_Node<Node_T>::value>());
}
template<class Node_T>
typename Node_T::node_ptr& get_root_hlp(Node_T& node,Tag_2_Type<node_tag>)
{
return node->root_;
}
template<class Node_T>
typename Node_T::node_ptr& get_root_hlp(Node_T& node,Tag_2_Type<tree_tag>)
{
return node->root_;
}
我收到错误:
错误 C2893:无法专门化函数模板 'Node_T &get_root(Node_T &)'
知道为什么吗?
Having those:
template<class T>
struct Is_Node
{
enum {value = false};
};
template<class Key_T, class Value_T>
class Node;//frwd decl.
template<class K,class V>
struct Is_Node<Node<K,V>>
{
enum {value = true};
};
enum Tags {tree_tag,node_tag,root_tag,parent_tag,left_tag,right_tag,key_tag,value_tag,color_tag};
template<Tags>
struct Tag_2_Type
{/*eb*/};
template<class Node_T>
typename Node_T::node_ptr& get_root(Node_T& node)
{
return get_root_hlp(node,Tag_2_Type<Is_Node<Node_T>::value>());
}
template<class Node_T>
typename Node_T::node_ptr& get_root_hlp(Node_T& node,Tag_2_Type<node_tag>)
{
return node->root_;
}
template<class Node_T>
typename Node_T::node_ptr& get_root_hlp(Node_T& node,Tag_2_Type<tree_tag>)
{
return node->root_;
}
I'm getting error:
error C2893: Failed to specialize function template 'Node_T &get_root(Node_T &)'
Any idea why?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您没有提供足够的代码来确定,但我怀疑问题是您在尝试调用 get_root 时尚未定义 Node,因此编译器无法识别 Node_T::node_ptr。另一个问题似乎是 get_root 在声明之前调用 get_root_hlp 。
You haven't given enough code to know for certain, but I suspect the problem is that you haven't defined Node when you try to call get_root, so the compiler doesn't recognise Node_T::node_ptr. Another problem appears to be that get_root calls get_root_hlp before it's declared.