Parent template for c++ style stream manipulators. More...
#include <manipulator.hpp>
Public Member Functions | |
template<typename ODevice > | |
void | insert (interfaces::OutputTextStream< ODevice, true > &ostream) |
The static crtp virtual parent call. | |
virtual | ~Manipulator () |
Parent template for c++ style stream manipulators.
This class uses a trick embedded within the curiously recurring template method to allow static inheritance (important in this case because the manipulator function call is template based). Manipulators have an advantage over the usual c++ style manipulators in that they are themselves classes (not functions such as std::endl). This means that they can retain state from one insertion to the next.
Usage:
The manipulators defined in the ecl export a few global instantiations, namely
Using them follows the same pattern as for standard c++ style cout manipulators.
using ecl::streams::OConsoleStream; using ecl::streams::endl; int main() { OConsoleStream ostream; ostream << clrscr; ostream << "Dude" << endl; return; }
Creating your own Manipulators:
Any manipulator that you wish to define must inherit from this parent class in the following manner:
include <ecl/streams/manipulators.hpp> class MyManipulator : public ecl::Manipulator<MyManipulator> { template <typename OutputStream> void action (OutputStream& ostream) { // ... } };
Derived | : the child manipulator the crtp uses. |
Definition at line 92 of file manipulator.hpp.
virtual ecl::Manipulator< Derived >::~Manipulator | ( | ) | [inline, virtual] |
Definition at line 114 of file manipulator.hpp.
void ecl::Manipulator< Derived >::insert | ( | interfaces::OutputTextStream< ODevice, true > & | ostream | ) | [inline] |
The static crtp virtual parent call.
This is exactly like a virtual function in a non-template c++ parent class, except it works for templates in the derived type. This function calls the derived class' action() method with the same signature.
ostream | : the stream to use for manipulation. |
OutputStream | : the output stream type. |
Definition at line 109 of file manipulator.hpp.