gpt4 book ai didi

c++ - 是否可以将 boost::bind 绑定(bind)到一个已知类的成员函数,但是一个(尚未)未知的对象?

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

我已阅读 here关于 boost:bind 的工作原理,尤其是它 - 除了其他东西 - 生成如下内容:

struct unspecified_type
{
... some members ...
return_type operator()(int i) const { return instance->*&klass::member(0, i);
}

现在,我正在寻找允许向实例指针添加额外间接寻址的东西,以便它最终看起来像这样:

struct unspecified_type
{
... some members ...
return_type operator()(int i) const { return (*p_instance)->*&klass::member(0, i);
}

可以像这样使用

MyClass* pmc;
auto mfp = boost::bind(&MyClass::some_func, &pmc);
pmc = new MyClass();
mfp();
pmc = new MyClass();
mfp();

最佳答案

您可以使用 std::bindstd::ref,或它们的 boost 等价物(但由于您使用的是 C++11,您可能需要使用标准类和函数)。所以给定这个类:

#include <iostream>

struct MyClass
{
int x;
MyClass(int x_) : x(x_) { }
void some_func()
{
std::cout << x << std::endl;
}
};

您可以将要调用成员函数的指针包装在 std::reference_wrapper 中传递。此外,避免使用 new(和 delete!),而更喜欢使用智能指针来建模对象所有权:

#include <functional>
#include <memory>

int main(int argc, char *argv[])
{
std::shared_ptr<MyClass> pmc;
auto mfp = std::bind(&MyClass::some_func, std::ref(pmc));

pmc = std::make_shared<MyClass>(42);
mfp();

pmc = std::make_shared<MyClass>(1729);
mfp();
}

这是一个live example .

关于c++ - 是否可以将 boost::bind 绑定(bind)到一个已知类的成员函数,但是一个(尚未)未知的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16608723/

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