无法专门化 fnc

发布于 2024-11-27 10:26:58 字数 989 浏览 1 评论 0原文

有了这些:

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

黑凤梨 2024-12-04 10:26:58

您没有提供足够的代码来确定,但我怀疑问题是您在尝试调用 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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文