2
有那些:不能專注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 &)'
任何想法,爲什麼?
哪一行錯誤即將到來?哪個代碼是'get_root()'是專門的? – iammilind
該錯誤消息似乎與代碼不一致。在代碼中,get_root()不返回Node_T&,但是Node_T :: node_ptr&。可能編譯器在您用作get_root的Node_T參數的類型中看不到node_ptr。 – imre
請提供完整的測試用例,代碼不完整。至少IsNode是一個沒有在那裏顯示的模板的專業化。另外,我看不到任何有關編譯器可能會抱怨的get_root專門化的嘗試。 – PlasmaHH