我有三个类(class)
class A
class B
class C
我有两张 map
std::map<A*, B*> myMap1;
std::map<A*, C*> myMap2;
和A的对象指针
A* obj_ptr_A1 = new A;
以此类推
我想在 A* 的两个映射上执行 find_if,所以我写了一个仿函数和重载运算符 () 两次,如下所示
class functor
{
private:
A* m_member;
public:
explicit functor(A* input) : m_member(input){}
bool operator()(const std::pair<A*, B*>& iter) const
{
return (m_member->GetValue() == (iter.first)->GetValue());
}
bool operator()(const std::pair<A*, C*>& iter) const
{
return (m_member->GetValue() == (iter.first)->GetValue());
}
};
其中 GetValue() 是 A
的成员函数,返回一个整数。
用法:
if(std::find_if(myMap1.begin(), myMap1.end(), functor(obj_ptr_A1)) != myMap1.end())
{
std::cout << "Found in myMap1" << std::endl;
}
if(std::find_if(myMap2.begin(), myMap2.end(), functor(obj_ptr_A1)) != myMap2.end())
{
std::cout << "Found in myMap2" << std::endl;
}
这给我编译错误
错误 C3066:可以通过多种方式使用这些参数调用此类型的对象
这是重载错误吗?
完整代码在这里http://pastebin.com/DnUQKHPp它给出了编译错误。
最佳答案
尝试以下(未经测试)
template <class T>
class functor
{
private:
A* m_member;
public:
explicit functor(A* input) : m_member(input){}
bool operator()(const std::pair<A*, T*>& iter) const
{
return (m_member->GetValue() == (iter.first)->GetValue());
}
};
if(std::find_if(myMap1.begin(), myMap1.end(), functor<B>(obj_ptr_A1)) != myMap1.end())
{
std::cout << "Found in myMap1" << std::endl;
}
if(std::find_if(myMap2.begin(), myMap2.end(), functor<C>(obj_ptr_A1)) != myMap2.end())
{
std::cout << "Found in myMap2" << std::endl;
}
关于c++ - 为 find_if 重载函数调用运算符 (),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22077372/