Skip to content

neu-rah/CRTPMix

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

CRTPMix

C++ CRTP with Mixins

Mixins

Open derivation templates, allowing further composition.

mixins are great to combine functionality (composition), but they lack an encapsulation.

CRTP can provide that.

CRTP

Allow composition to act as a block (encapsulation)

Example

Mixins

class API{/*...*/};

template<typename O=API>
class ConstText {/**/};

template<typename O=API>
class FlashText:O {
  using Base=O;
  /*...*/
};

template<typename O>
class Text:O {
  using Base=O;
  /*...*/
};

//composing the parts
using MyText=Text<FlashText<API>>;

//or using Chain
using MyText=Chain<Text,FlashText>::To<API>;

//or enclose the composition
//(so that API can use final composition members)
using MyText=Composition<API,Text,FlashText>;

/*we can then replace FlashText with ConstText according to platform, or compose any extra functionality defined in future.
ex: we could create an Upcase part...
*/

Chain template helps making the mixin composition easier to write.

Composition defined on top of Chain to provide an encapsulation and a terminating API

Any composition part can then use:

Base::Type to obtain the encapsulation type

Base::obj() to obtain the encapsulation object