如何将std :: function作为模板参数传递并为其设置默认值?

时间:2019-05-11 18:56:15

标签: c++ c++11

我想为Binary Search Tree构建一个模板化类,在其中用户可以通过传递lambda或functor作为模板参数来选择其他比较函数。

我无法在GCC或Microsoft编译器上进行编译。

我假设函数对象与其他任何对象一样,可以以lambda形式进行默认初始化。我试图找到满足我要求的示例,但未能做到。我还尝试对函数类使用“使用”。

template <class Object>
using comparer = std::function<bool(const Object& a, const Object& b)>;

/*
    BST class
*/

template <class Object, comparer<Object> comp = [](const Object& a, const Object& b){ return a < b; }>

class BinarySearchTree
{
protected:
    class Node
    {
        //Nodes used to store data.
    };
    Node* root;
public:
    BinarySearchTree() : root(NULL) {}
    //I will use the comp function in the following functions.
    void insert(const Object& x);
    Node* find (const Object& x) const;
    void remove(const Object& x);
};

它没有按预期编译。我第一次使用高级c ++功能,因此无法准确识别问题。 我收到错误“模板参数列表中'struct'的定义”。

0 个答案:

没有答案