如何在模板类中从main c ++发送打印函数的方法

时间:2018-03-15 00:12:35

标签: c++ templates pointers member-function-pointers

这是我试图使用的打印功能,但它不起作用。目前它位于main()文件中,但在main()本身之外。我一直在接受 c2228:" .data"的左边必须有class / struct / union 我根本不是编码专家,而且我很难搞清楚这一点。因为它是一个模板我假设p还没有任何东西而且无法传递给inorder函数问题是如何解决这个问题我找不到任何甚至接近我的东西理解。请提供一个可行的示例或解决方案,并尽可能接近noob级别。谢谢!

template <class Entry>
void print(Entry&);
template <class Entry>
void print(Entry& p)
{
    cout << p.data << endl;
}

这是我尝试使用的功能。我需要迭代遍历AVL树并使用这个传递的打印函数来访问和打印来自节点的数据。

声明

void inorder(void(*visit)(Entry &));

实施

template<class Entry>
inline void Binarytree<Entry>::inorder(void(*visit)(Entry &))
{
}

在main()

中调用
tree.inorder(print);

1 个答案:

答案 0 :(得分:0)

您在二叉树中使用的Entry类型看起来没有名为data的成员。树中的条目是什么?英特尔,还是某类?

在任何情况下,这是编译代码的示例:

template <class Entry>
void print(Entry& p)
{
    std::cout << p.data << std::endl;
}

template<class Entry>
class BinaryTree
{
public:
    vector<Entry> items;
    inline void inorder(void(*visit)(Entry &))
    {
        for (auto& it : items)
        {
            visit(it);
        }
    }
};

class SomeType
{
public:
    int data;
};

int main()
{
    BinaryTree<SomeType> a;
    a.inorder(print);
}