c++调用模板仿函数但不传递参数

标签 c++ pass-by-reference functor

我试图理解 C++ 中的两件事,仿函数和传递引用。下面是库 libtins 的示例代码,此处可用 libtins example .函数 snifferloop() 采用模板仿函数 doo()

仿函数的声明是 bool doo(PDU &some_pdu) 所以 PDU 类型的参数 some_pdu 通过引用传递给函数.

但是,doo() 被调用为 sniffer.sniff_loop(doo); 并且似乎没有参数传递给 doo() .

有人可以解释一下这里发生了什么吗?抱歉,如果它是基本的。

bool doo(PDU &some_pdu) {
    // Search for it. If there is no IP PDU in the packet, 
    // the loop goes on
    const IP &ip = some_pdu.rfind_pdu<IP>(); // non-const works as well
    std::cout << "Destination address: " << ip->dst_addr() << std::endl;
    // Just one packet please
    return false;
}

void test() {
    SnifferConfiguration config;
    config.set_promisc_mode(true);
    config.set_filter("ip src 192.168.0.100");
    Sniffer sniffer("eth0", config);
    sniffer.sniff_loop(doo);
}

最佳答案

sniffer.sniff_loop(doo) 不调用 doo。它调用 sniffer.sniff_loop,将指向 doo 的指针作为参数传递给 sniffer.sniff_loop。然后 sniffer.sniff_loop 将使用该参数调用 doo,将参数传递给 doo

关于c++调用模板仿函数但不传递参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48441032/

相关文章:

c++ - 禁用默认模板并仅通过 sfinae 使用特化

c++ - 在 C++ 中什么时候可以返回类实例?

javascript - .click() 回调引用调用方法中的局部变量,而不是按值复制

haskell - 如何使用应用程序链接任意长度的原子解析器系列?

java - 是否可以用 Java 实现 `Functor<T>`?

haskell - 仿函数的实例

c++ - 尝试添加引用时 VS 社区错误

c++ - 串行端口奇偶校验在 boost asio 中失败

c - C 中没有通过引用调用?

c++ - 具有抽象基类的工厂模式 - 通过 ref 或通过值返回?范围界定和切片的问题