在 C++ 标准或 Boost 中是否有一个小仿函数环绕另一个仿函数,但在调用该仿函数之前取消对指针的引用?
我在想这样的事情:
template<class F>
struct DerefCmp {
template<class T>
bool operator()(T* v) const {
return F(*v);
}
};
我会在指针容器中使用它,例如,我想按值进行比较:
std::set<int*, DerefCmp< std::equal<int> > > s;
最佳答案
我不知道 C++ 标准库或 Boost 中有任何函数对象这样做(这并不是说没有;我不熟悉 Boost 库中的所有内容:-P)。
但是,编写自己的代码相当简单。考虑以下:
template <typename Predicate>
class indirect_binary_predicate
{
public:
indirect_binary_predicate(const Predicate& pred = Predicate())
: pred_(pred)
{
}
template <typename Argument0, typename Argument1>
bool operator()(Argument0 arg0, Argument1 arg1) const
{
return pred_(*arg0, *arg1);
}
private:
Predicate pred_;
};
用法示例:
std::set<int*, indirect_binary_predicate<std::equal_to<int> > > s;
请注意,如果指针指向动态分配的对象并且容器拥有所指向对象的所有权,那么使用原始指针容器是不明智的;这样做不是异常安全的。也就是说,这个谓词适配器应该同样适用于智能指针、迭代器或任何其他支持取消引用的类型。
关于c++ - 取消引用后调用函数的仿函数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6269313/