c++ - 为 find_if 重载函数调用运算符 ()

标签 c++ class operator-overloading

我有三个类(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/

相关文章:

c++ - 有没有办法将 vector 成对放在方括号中

c++ - 在 c++ 中寻找 win7 64 位任务栏上的 DeskBand 工具栏示例

c++/openFrameworks - 如何包含一个类

php - 访问子类中的私有(private)变量

C++方法的继承和返回值

c++ - 如何在 Windows 上使用 gtest 获得代码覆盖率?

c++ - 如何根据单个用户定义的文字自动添加文字定义?

c++ - C++ 中的 STL 和重载

c++ - 运算符重载 + C++ 中的运算符。如何重载objecttype+Objecttype = Objecttype B?

c++ - 我有一个由 0's and 1' 组成的字符串。如何将二进制格式的 0's and 1' 存储在文件中?