不能专攻fnc

时间:2011-08-03 10:07:30

标签: c++ metaprogramming

有那些:

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&amp; get_root(Node_T&amp;)'

知道为什么吗?

1 个答案:

答案 0 :(得分:0)

您没有提供足够的代码来确定,但我怀疑问题是您在尝试调用get_root时未定义Node,因此编译器无法识别Node_T :: node_ptr。另一个问题似乎是get_root在声明之前调用了get_root_hlp。