metaprogramming/src/Lambda.hpp
2024-11-27 20:30:52 +01:00

36 lines
721 B
C++

#include "Data.hpp"
template <typename Return, typename... Parameters>
struct Lambda {
using returnType = Return;
// using paramType = Parameter;
};
template <typename X>
struct Identity :
public Lambda<typename X::type, typename X::type>
{
using value = X;
};
template <typename X>
struct NumericIncrement :
public Lambda<typename X::type, typename X::type>
{
using value = Number<X::value + 1>;
};
template <typename X>
struct NumericDouble :
public Lambda<typename X::type, typename X::type>
{
using value = Number<X::value * 2>;
};
template <typename X, typename Y>
struct NumericAdd :
public Lambda<typename X::type, typename X::type, typename Y::type>
{
using value = Number<X::value + Y::value>;
};