c++ - 无法专攻 fnc

标签 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 &get_root(Node_T &)”

知道为什么吗?

最佳答案

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

关于c++ - 无法专攻 fnc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6924784/

相关文章:

c++ - MSVC 上的双字节编码 (std::codecvt):无法识别前导字节

r - 在 R 表达式中查找所有函数的名称

ruby - 从模块创建类方法

javascript - 获取 JavaScript 类构造函数的源代码

c++ - 如何在 eclipse makefile 项目的编译器选项中设置 -std=c++0x?

C++ - 从 std::string 解析数字

android - 使用枚举如何增加可执行文件的大小?

c++ - 为什么这是模棱两可的?我能做些什么来解决这个问题?

python - python属性的get和set顺序是什么?

Ruby:def 和 define_method 之间的区别