我想知道如何使用模板函子作为find_if的参数。我不确定语法。
例如,假设一个从多图形产品中删除产品的仿函数。要做到这一点,我必须扫描"多图,找到产品(使用我的平等仿函数)并删除它。
在这里,我的平等'算符:
class isEqual
{
public:
isEqual(T* t) : t_(t) {}
bool operator()(const pair<int, T*> pair) const
{
return (pair.second == t_);
}
private:
T* t_;
};
以及这里的操纵者&#34;擦除产品&#34;在哪里我必须使用我的&#39;是平等的#39;产品:
class EraseProduct
public:
EraseProduct(multimap <int, Produit*>& multimap) : multimap_(multimap) {} ; // constructor that initializes 'multimap_' attribute
multimap <int, Product*>& operator()(Product* product)
{
auto it = find_if(multimap_.begin(), multimap_.end(), USE_EQUAL_FUNCTOR_HERE)
if (it != multimap_.end)
multimap_.erase(it)
return multimap_;
}
private:
multimap<int, Product*>& multimap_;
产品是一个类。所以我的问题是我写的地方&#34; USE_EQUAL_FUNCTOR_HERE&#34;。我无法弄清楚正确的语法。我试过了:
IsEqual(), IsEqual(product)
和其他一些东西。
提前谢谢!
答案 0 :(得分:1)
isEqual
成为一个类模板。如发布,它不是。Product
作为模板参数来创建实例并将其用作find_if
的参数。template <typename T>
class isEqual
{
...
};
和
auto it = find_if(multimap_.begin(), multimap_.end(), isEqual<Product>());