如何在C ++中正确使用函数对象作为模板参数

时间:2018-11-18 03:21:27

标签: c++

在使用函数对象作为Template类中方法的模板参数时,我遇到了问题,我找不到如何做自己想完成的事情的解释或示例。

AddExpense将指向Expense类型的对象的指针作为参数,将费用添加到包含Expense *的向量中,并通过引用返回该向量并添加费用。 AddUser正在获取指向User类型的对象的指针,将其添加到地图中并通过引用返回地图。

class AddExpense
{
public:
    AddExpense(vector<Expense*>& container);
    vector<Expense*>& operator()(Expense* Value);

private:
    vector<Expense*>& container_;
};

AddExpense::AddExpense(vector<Depense*>& conteneur) : 
conteneur_(conteneur)
{
}

vector<Expense*>& AddExpense::operator()(Expense* Value)
{
    container_.push_back(Value);
    return container_;
}


class AddUser
{
 public:
    AddUser(map<User*, double>& container);
    map<User*, double>& operator()(User* user);

private:
    map<User*, double>& container_;

};

AddUser::AddUser(map<User*, double>& container) : container_(container)
{
}

map<User*, double>& AddUser::operator()(User* user)
{
    container_.insert(pair<User*, double>(user, 0.0));
    return container_;
}

我正在尝试在模板类中使用函数对象,其中 T是费用*或用户* C是矢量或地图 D是费用*或成对 FunctorAdd是AddExpense或AddUser

我检查了一些在线资源以及几本书,但是我找不到如何做的方法。我希望有人可以向我解释它是如何完成的,或指向我可以从中学习更多有关该主题的资源。

template <typename T, typename C, typename D, typename FunctorAdd>
class GenericManager
{
public:
.
. 
.
    //takes a pointer t and adds it to the container using FunctorAdd
    //which changes based on the type of container used
    void add(T t)
    {

    }

protected:
    C container_;
};

0 个答案:

没有答案