0
독립 함수에 래핑 된 멤버 함수를 boost::bind
을 통해 전달하려고합니다. 다음은 축소 된 샘플입니다.boost :: bind를 클래스 멤버 함수
/home/Loom/src/main.cpp:130: error: no matching function for call to
‘Foo::Foo
(std::basic_string<char, std::char_traits<char>, std::allocator<char> >
, boost::_bi::bind_t
< const std::pair<double, double>
, boost::_mfi::mf1
< const std::pair<double, double>
, Bar
, const std::string&
>
, boost::_bi::list2
< boost::_bi::value<Bar>
, boost::arg<1>
>
>
)’
/home/Loom/src/Foo.h:32: note: candidates are:
Foo::Foo(const std::string&, const std::pair<double, double> (*)(const std::string&))
/home/Loom/src/Foo.h:26: note:
Foo::Foo(const Foo&)
코드와 방법에 문제가 이러한 문제를 방지하기 위해 무엇 :
// Foo.h
typedef const std::pair<double, double> (*DoubleGetter)(const std::string &);
class Foo : private boost::noncopyable {
public:
explicit Foo(const std::string &s, DoubleGetter dg);
};
// Bar.h
struct Bar {
const std::pair<double, double> getDoubles(const std::string &s);
};
// main.cpp
boost::shared_ptr<Bar> bar(new Bar());
std::string s = "test";
Foo foo(s, boost::bind(&Bar::getDoubles, *(bar.get()), _1));
그러나 나는 텍스트와 컴파일러 오류가있어?
왜 sp를 derefencing할까요? 단순히 "sp"소유자를 증가시킬 부스트 바인딩에 공유 포인터로 막대를 전달하면 막대가 삭제되지 않을 것입니다. 이 경우에는 문제가되지 않지만 다른 경우에는 문제가 될 수 있습니다. –