Skip to content

Welcome C++ template hell. Template meta programming at its worst

License

Notifications You must be signed in to change notification settings

jpommerening/template-hell

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

19 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

template-hell

Welcome C++ template hell. Template meta programming at its worst

You probably should not use this.

Example

The following example creates a variable "distance" that stores its value as a double and has the unit "meters". It is initialized to equal the length of one mile.

#include <iostream>
#include "units/si_units.h"
#include "units/imperial_units.h"
#include "units/value.h"

int main( void ) {
  Value<double, SIUnits::m> distance = Value<double, ImperialUnits::mile>( 1. );
  std::cout << distance << std::endl;
  return 0;
}

There are some physical constants such as the speed of light (c0) that have a complex unit associated with them, in this case meters per second. Using C++11's auto type we can let the compiler's template system figure out the type of out calculations.

#include <iostream>
#include "units/si_units.h"
#include "units/physical_constants.h"
#include "units/value.h"

int main( void ) {
  /* so, how far did light go again, in a second? */
  auto result = PhysicalConstants<double>::c0 * Value<double, SIUnits::s>( 1. );
  std::cout << result << std::endl;
  return 0;
}

About

Welcome C++ template hell. Template meta programming at its worst

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published