Opened 12 years ago

Last modified 12 years ago

#4569 new Patches

[patch] fusion::unfused reusability / perfect forwarding

Reported by: anonymous Owned by: t_schwinger
Milestone: To Be Determined Component: fusion
Version: Boost 1.44.0 Severity: Problem
Keywords: Cc:

Description

attached is a patch to unfused.hpp, used by fusion::make_unfused.

what it does:

  • "fused" currently forces you to store a function object in order to use the "unfusing" interface. this patch makes the interface of unfused reusable by other classes, by introducing a CRTP class "unfuse_interface", that is used by unfused.

simplified example:

class unfused : unfused_interface<unfused,...>{
private:
  friend class unfused_interface;
  result call(Args &args){
    //unfused::operator()(...) was called. args is a sequence
    //of the passed arguments
    return stored_fused_functor(args);
  }
  Function stored_fused_functor;
};

  • perfect forwarding:

"unfused" only takes non-const references as arguments. this patch changes that to the compromise of boost::bind(): perfect forwarding for up to 2 arguments, beyond that either all arguments are const refs, or all arguments are non-const refs.

Attachments (1)

unfused.patch (10.0 KB ) - added by anonymous 12 years ago.

Download all attachments as: .zip

Change History (4)

by anonymous, 12 years ago

Attachment: unfused.patch added

comment:1 by anonymous, 12 years ago

Type: Feature RequestsPatches

comment:2 by anonymous, 12 years ago

the "perfect forwarding" part seems to create more problems than it solves, especially regarding result_of instantiations, so if you consider this patch I'd now recommend leaving out the forwarding part.

comment:3 by Joel de Guzman, 12 years ago

Owner: changed from Joel de Guzman to t_schwinger
Note: See TracTickets for help on using tickets.