【发布时间】:2016-07-14 20:54:41
【问题描述】:
我在一个项目中遇到了以下代码。
map_erase_if(cfgIp.m_raw, RawCreate());
我知道这将调用结构内部由 () 定义的函数。
Rawcreate 是一个结构,如下所示。
struct RawCreate {
bool operator()(const Device::StoreElm& el) {
Pcap* pcap = NULL;
pcap = Pcap::findServer(el.second->name());
if (!pcap) {
try {
MEM_NEW(pcap,Pcap(*el.second));
} catch (Exception& ex) {
MAND_LOG(DBG_SIPTCP, "Error:%s", ex.what());
}
}
for (RejItr itr = CfgIp::m_rejectList.begin(); itr != CfgIp::m_rejectList.end(); ++itr) {
if(ip_equal(itr->first, pcap->getInterface(), false) && !itr->second.empty()) {
pcap->blockReg();
}
}
if (pcap) {
MEM_DELETE(el.second);
return true;
}
return false;
}
};
我已经看到使用类对象重载运算符。我知道类和结构在 cpp 中只有很少的区别。但是以这种方式在结构中使用重载对我来说是一个新事物。有人可以澄清它的用法吗?
【问题讨论】:
-
这篇文章将帮助您理解:stackoverflow.com/questions/92859/…,所以除了默认访问说明符之外没有区别
-
en.cppreference.com/w/cpp/language/class 基本上,
struct和class表示同一个实体。 -
RawCreate()不调用operator()。它只是创建该类型的一个实例。operator()可能会从您未显示的map_erase_if函数内部调用。 -
在 map_erase_if 中 RawCreate() 被用作 std::find_if 的谓词
标签: c++