矢量
typedef vector<Message*> OmciMessages;
OmciMessages omciResponses;
而且我有一个像下面的一个函子,我怀疑是不正确的:
class isMatching{
public:
bool operator()(const Message* responseMsg,unsigned short transactionid){
return responseMsg->getTransactionId()==transactionid;
}
};
然后调用find_if并且想要使用仿函数来查找向量中的某些内容,但仅限于我的类中的特定transactionid:
OmciMessages::iterator responseit
= find_if(omciResponses.begin(),
omciResponses.end(),
bind2nd(isMatching(),transactionid));
编译器不喜欢它,并产生相当多的很难解释的模板类的错误消息。
/repo/stuyckp/ngpon2WW/tools/cm4/tools/GNU/src/gcc/i686-pc-linux-gnu/bin/../lib/gcc/i686-pc-linux-gnu/3.4.6/../../../../../include/c++/3.4.6/bits/stl_function.h:429: error: no type named `first_argument_type' in `class isMatching'
它的工作,如果我做到了,这样没有一个函数对象:
static bool isMatching(Message* responseMsg){
return responseMsg->getTransactionId()==transactionid;
}
transactionid = 5; //global variable being used. yuck, don't like it
find_if(omciResponses.begin(),
omciResponses.end(),
isMatching);
但我需要的是预先设定的,我认为并不好设计的全局变量事务ID。 那么这是怎么应用bind2nd方法?
'transactionid'是一个全局变量吗?某些方法不是'find_if()'调用的一部分吗? – CinCout
它不再是如果我使用函数,只有当我使用静态isMatching函数我需要全局变量在isMatching函数内使用它。正如你所看到的,transactionid没有在该函数中声明。关键是我想避免这种全球性。 –