在使用函数对象作为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_;
};