C ++仿函数和列表模板

时间:2015-06-29 00:27:19

标签: c++ templates functor

我已经实现了一个列表和迭代器模板,find方法应该接收一个仿函数,所以我声明并实现了一个,但我不断得到错误,那里没有这样的对象! " 没有匹配函数来调用const类型的对象findBond "

这里是find方法的实现:

class findBond{

    Bond& bond;

public:

    findBond( Bond& bond1) : bond(bond1) {}

    bool operator() (Bond& bond1){

            return bond==bond1;

            }
};

这里是功能对象:

void InvestmentBroker :: addBond(const string& name, double value, int amount ){
    Bond bond = *new Bond(name, value, amount);

    if (bondsDatabase.find(findBond(bond)) != bondsDatabase.end()) {

        //throw an exception

    } else { 

       // insert bond to dataBase

    }
}

我试图在这里使用它们:

{{1}}

我包含了所需的文件,因此它与包含

无关

出了什么问题?我在这里错过了什么?

2 个答案:

答案 0 :(得分:1)

您的find方法以const Predicate&为参数。这意味着您只能调用谓词的const方法。但是,您的仿函数调用运算符未声明为const。您可以通过声明const来解决您的问题:

bool operator() (Bond& bond1) const {/* do stuff */ }

声明末尾的const表示您无法在功能中修改this,这反过来意味着您可以在const上调用该功能对象

答案 1 :(得分:1)

对我来说,这似乎是一个常量问题 - findBond在大多数参数上应该是const

findBond更改为此

class findBond{
    const  Bond& bond;

public:

    findBond( const Bond& bond1) : bond(bond1) {}

    bool operator() const ( const Bond& bond1){
         return bond==bond1;
    }
};