Mailinglist Archive: zypp-devel (56 mails)

< Previous Next >
Re: [zypp-devel] zypp::ProgressData question
  • From: "Duncan Mac-Vicar P." <dmacvicar@xxxxxxx>
  • Date: Tue, 4 Dec 2007 21:40:21 +0100
  • Message-id: <200712042140.21170.dmacvicar@xxxxxxx>
On Tuesday 04 December 2007 05:54:04 pm Ladislav Slezak wrote:
Hello all,

I'm improving callback implementation in pkg-bindings,
I'd like to add a total progress and the callbacks should be displayed
in the main dialog (instead of popups).

I'm reusing zypp::ProgressData class with zypp::CombinedProgressData class
which provides a sub progress for a sub task. That's nice.

But I have a problem, I can register only
bool function(const zypp::ProgressData&)
as the receiver function, I'd like to register
bool MyClass::function(const zypp::ProgressData&)

Hi Ladislav

Well, you can't register a function of a class because if the function is not
static, you actually need an instance of the class.

The solution for this is to use boost::bind, which we use a lot in ZYpp. If
you look at the YUM parser code, which uses callbacks a lot for data
consuming, you can use boost bind to get a functor object using it like this:

bind(&RepoParser::Impl::repomd_CB, this, _1, _2));

That means, use the repomd_CB function of that class, on the this object, and
then the parameters order (you can even invert or ignore parameters when
binding), the result of that expression is a functor you can use in place of
any functor, so you can set the ProgressData progress callback to the result
of a bind expression.

Don't hesitate to ask again in doubt! boost is tricky,

Duncan
--
To unsubscribe, e-mail: zypp-devel+unsubscribe@xxxxxxxxxxxx
For additional commands, e-mail: zypp-devel+help@xxxxxxxxxxxx

< Previous Next >
References