gpt4 book ai didi

c++ - boost::bind 何时将参数转换为所需的类型?

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:59:24 27 4
gpt4 key购买 nike

当我使用 boost::bind 将参数绑定(bind)到函数时 - 何时将它们转换为函数所需的类型(如果可以进行隐式转换)?

它们如何存储在 bind_t 对象中?作为最初传递给绑定(bind)的类型还是作为函数签名所需的类型?

具体来说:

如果我有签名的功能

void SomeFun(SmartPointer<SomeType>)

我使用绑定(bind)作为

boost::bind(&SomeFun, somePtr)

哪里somePtr类型为 SomeType* , 将 bind_t对象包含 somePtr 的拷贝存储为简单指针或将其转换为 SmartPointer<SomeType>并存储为 SmartPointer<SomeType>

有一个来自 SomeType* 的隐式转换至 SmartPointer<SomeType> .相对于 boost::shared_ptr这个SmartPointer在托管对象中使用引用计数器,意思是 SomeType必须来自 SmartPointed .

最佳答案

这甚至不会工作,因为没有从 SomeType* 到 shared_ptr 的隐式转换或隐式构造函数。

你应该打电话

boost::bind(&SomeFun, boost::shared_ptr<SomeType>(somePtr))

如果 somePtr 是一个你刚刚用“new”分配的指针,并且期望稍后在 shared_ptr 的最后一个引用超出范围时被删除。如果您不想删除指针但您知道它在调用时仍然有效,并且该函数必须采用 shared_ptr,则可以使用无操作删除器来创建 shared_ptr。无论哪种方式,它都是一个 shared_ptr,而不是指针或 weak_ptr 或您必须在此实例中传递的任何其他内容。

您说您的情况不同,因此我们必须查看您的实际情况或更接近的情况。

您可能会对以下情况感到困惑:您传入的函数是类成员函数,而您传入​​类实例(对象)作为参数之一。在这里您可以传入一个指针、一个引用或一个 shared_ptr,如果该函数是一个 const 方法(类似于指向 const 的指针或指向 const 的 shared_ptr),它可以是一个 const 引用。

这仅仅是因为当函数是类成员函数时,boost::bind 有不同的重载。

如果转换是隐式的,则隐式转换将在调用函数时发生。 boost::bind 只是一个模板,用于存储传递给它的内容。如果第一个参数用于调用成员函数,则会发生一些神奇的事情。

请注意,有时 boost::bind 会存储一个 boost::ref,函数实际需要一个引用。

关于c++ - boost::bind 何时将参数转换为所需的类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4669050/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com