From 8b6de4c8c89d31c5d0e16548767ef21f242aadd1 Mon Sep 17 00:00:00 2001 From: Adrian Kummerlaender Date: Sun, 25 Jan 2015 20:35:38 +0100 Subject: Implemented partial function application prototype * function `Apply` enables partial supply of the template parameters of a given _function_ ** unsupplied parameters may be marked by _placeholders_, i.e. approach is similar to `std::bind` ** returns a template type taking the remaining, unsupplied parameters of the partially applied _function_ * this is a prototype in the sense, that neither full application using `Apply` or partial application of higher order functions is currently supported ** e.g. a `single_type` alias type declaration is required as the variadic template `template` doesn't directly map to `template` * appropriate test cases document current feature set * the goal is to enable a concise defintion of _lambda-like_ expressions for easy specialization of e.g. functors provided to higher order functions --- test.cc | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) (limited to 'test.cc') diff --git a/test.cc b/test.cc index 62c6f85..6f95ca9 100644 --- a/test.cc +++ b/test.cc @@ -14,6 +14,8 @@ #include "list/generator/make_list.h" #include "list/generator/higher/list_tabulate.h" +#include "function/apply.h" + int main(int, char **) { } // equality @@ -631,3 +633,24 @@ static_assert( >::value, "(count even? (list 1 3 5)) != 0" ); + +// function apply + +static_assert( + std::is_same< + tav::Int<42>, + tav::Apply, tav::_0>::type>::type + >::value, + "((lambda (x) (* 21 x)) 2) != 42" +); + +static_assert( + std::is_same< + tav::List, tav::Int<12>, tav::Int<14>>::type, + tav::Map< + tav::Apply>::single_type, + tav::List, tav::Int<2>, tav::Int<4>>::type + >::type + >::value, + "(map (lambda (x) (+ x 10)) (list 0 2 4)) != (list 10 12 14)" +); -- cgit v1.2.3