如何将函数作为参数传递,带参数? [复制]

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 前缀全局很好地解决了这个问题。

以上是关于如何将函数作为参数传递,带参数? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

我们如何在 C++ 中将二维数组/向量作为函数参数传递? [复制]

是否可以在c中将函数作为参数传递? [复制]

如何在python中将字典项作为函数参数传递? [复制]

作为参数的函数是不是必须按值传递? [复制]

JS函数如何传递带空格参数

如何将类作为方法的参数传递? [复制]