From 376c524f965674de8649267bad20937d6c0f9cd9 Mon Sep 17 00:00:00 2001 From: Adrian Kummerlaender Date: Fri, 23 Jan 2015 20:53:17 +0100 Subject: Added _TypeAsValue_ project page * fixed grammar of _StaticXSLT_ page --- pages/projects/type_as_value.md | 43 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 pages/projects/type_as_value.md (limited to 'pages/projects/type_as_value.md') diff --git a/pages/projects/type_as_value.md b/pages/projects/type_as_value.md new file mode 100644 index 0000000..e8d2a21 --- /dev/null +++ b/pages/projects/type_as_value.md @@ -0,0 +1,43 @@ +# TypeAsValue + +…is a template metaprogramming library intended for compile time computation written in C++. + +As its name implies it follows the overall concept of viewing types as values and templates as functions manipulating those values. This view on template metaprogramming lends itself quite well to a _Scheme_ like way of doing functional programming. + +_TypeAsValue_ is currently primarily a reimplementation of my previous attempt at this problem: [ConstList]. As detailed in the appropriate [blog article] the mixed approach between generic lambda expressions, `constexpr` marked functions and template metaprogramming doesn't offer sufficient flexibility which led me to approach compile time computation in a slightly different manner via this new library. + +Its MIT licensed source code is available on both [Github] and [cgit]. + +## Current features + +* guaranteed evaluation during compile time +* basic math and logic operations +* conditionals +* `Cons` structure +* `List` function as helper for `Cons` construction +* basic list operators such as `Nth`, `Length`, `Take` and `Append` +* higher order list operation `Fold` +* higher order list operations such as `Map` and `Filter` expressed in terms of `Fold` +* higher order list queries such as `Any`, `All` and `None` +* list generators such as `Iota` and `ListTabulate` +* `static_assert` based test cases for all of the above + +## Usage example + +~~~ +// λ (length (filter odd? (list 1 2 3))) +// 2 + +const std::size_t count = tav::Length< + tav::Filter< + tav::Odd, + tav::List, tav::Int<2>, tav::Int<3>>::type + >::type +>::type::value; +~~~ +{: .language-cpp} + +[ConstList]: /page/const_list/ +[blog article]: /article/a_look_at_compile_time_computation_in_cpp/ +[Github]: https://github.com/KnairdA/TypeAsValue/ +[cgit]: http://code.kummerlaender.eu/TypeAsValue/ -- cgit v1.2.3