如何将函数作为参数传递,带参数? [复制]
Posted
技术标签:
【中文标题】如何将函数作为参数传递,带参数? [复制]【英文标题】:How to pass a function as an argument, with arguments? [duplicate] 【发布时间】:2015-11-08 21:48:00 【问题描述】:所以,我正在使用 GNUTLS 中的回调。
我想将我的函数handleSNI
传递给一个函数,但我还想传递一些其他重要的参数(在调用它时传递给handleSNI)。
我可以在全局变量中的函数之外执行它们,但这不是线程安全的。
有可能吗?如果没有,如何做到这一点?
【问题讨论】:
你在使用类吗?因为如果你不是,用一个类来实现你所说的会更容易。 @GabrielMello 与此无关。 【参考方案1】:GnuTLS 支持回调中的用户定义参数。对于推拉功能,您可以通过gnutls_transport_set_ptr
设置它们。你传递一个指向包含你的数据的结构的指针,并在你的回调中使用它。
在更一般的层面上,答案是:如果您的库不支持用户定义的参数,那么您就不走运了。在 C 语言中,没有办法欺骗额外的参数。如果你找到了这样的库,请帮自己一个忙,不要使用它。如果没有其他选择,您可以使用线程安全容器或线程本地存储。但是真的很丑。
【讨论】:
set_ptr 不等同于在 set_int 中设置 sockfd 吗? 一个 __thread 前缀全局很好地解决了这个问题。以上是关于如何将函数作为参数传递,带参数? [复制]的主要内容,如果未能解决你的问题,请参考以下文章