如何将函数作为参数传递给参数?

How to pass a function as an argument, with arguments?

所以,我正在玩 GNUTLS 中的回调。

我想将我的函数 handleSNI 传递给一个函数,但我也想传递一些其他重要参数(在调用时处理 SNI)。

我可以在全局变量中的函数之外执行它们,但这不是线程安全的。

可能吗?如果没有,如何才能做到这一点?

GnuTLS 支持回调中用户定义的参数。对于推拉功能,您可以通过 gnutls_transport_set_ptr 设置它们。您传递一个指向包含您的数据的结构的指针,并在您的回调中使用它。

在更一般的层面上,答案是:如果您的库不支持用户定义的参数,那您就不走运了。在 C 中,没有办法欺骗额外的参数。如果你找到这样的库,请帮自己一个忙,不要使用它。如果别无选择,您可以使用线程安全容器或线程本地存储。但是真的很丑