gpt4 book ai didi

c++ - Boost::bind 与对象占位符

转载 作者:行者123 更新时间:2023-11-28 07:56:31 29 4
gpt4 key购买 nike

我正在尝试实现观察者模式,但我需要在项目的后期为每个观察者添加新功能。

class Obsevers {
public:
virtual ~Obsevers() {}
};

class TestObserver : public Obsevers {
public:
void print1(int i) {
std::cout << i << std::endl;
}
};

class TestObserver2 : public Obsevers {
public:
void print2(int i, char c) {
std::cout << i << " , " << c << std::endl;
}
//possible new functions here later
};

我的通知方法如下:

template<typename Type, typename Notify>
void NotifyObserver(Notify notify) {
typedef std::list<Obsevers*>::iterator iter;
iter it = m_observers.begin();
iter end = m_observers.end();
for(; it != end; ++it) {
Type * o = dynamic_cast<Type*>(*it);
if(o == NULL) continue;
notify(o);
}
}

调用通知代码如下。

NotifyObserver<TestObserver2>(boost::bind(&TestObserver2::print2, _1, 32, 'b'));

现在给定上述代码块的上下文,我的问题是在绑定(bind)中为对象参数使用占位符 (_1) 是否正确,或者这是未定义的行为?

关于 bind 的 boost 文档没有指定仅对函数参数使用对象的占位符。

最佳答案

您的代码是正确的。

Boost.Bind文档表明您的代码

boost::bind(&TestObserver2::print2, _1, 32, 'b')

相同

boost::bind<void>(boost::mem_fn(&TestObserver2::print2), _1, 32, 'b')

哪里boost::mem_fn负责调用指向成员函数的指针。只要绑定(bind)对象被评估为 boost::mem_fn 的东西可以使用,例如指针或引用,它将正确调用该函数。

关于c++ - Boost::bind 与对象占位符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12590959/

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