CGRA-ME
Classes | Functions
Functional.h File Reference
#include <memory>
#include <mutex>

Go to the source code of this file.

Classes

struct  LazyPointer< Gen, Value_ >
 
struct  LazyPointer< Gen, Value_ >
 
struct  AlwaysFalse
 
struct  AlwaysTrue
 
struct  DoNothing
 

Functions

template<typename Gen , typename Value = std::remove_cv_t<std::remove_reference_t<decltype(std::declval<Gen>()())>>
auto lazy_pointer (Gen &&g)
 
template<typename T >
auto returnsIfEqualTo (T t)
 

Function Documentation

◆ lazy_pointer()

template<typename Gen , typename Value = std::remove_cv_t<std::remove_reference_t<decltype(std::declval<Gen>()())>>
auto lazy_pointer ( Gen &&  g)

Construct a 'lazy pointer' – won't call g until operator* or operator-> is used, and it will only call it once. Be very careful around capture lifetimes. Otherwise, this class behaves like a std::unique_ptr that propagates const to it's stored object.

Ex. struct S { int i; }; auto l1 = lazy_pointer([]() -> S { std::cout << "l1 computed! "; return {4}; }); std::cout << l1->i << l1->i << '
'; // prints "l1 computed! 44"; auto l3 = lazy_pointer([]{ std::cout << "l3 computed! "; return 5; }); std::cout << *l3 << *l3 << '
'; // prints "l3 comptuted! 55"

Note: using a plain function pointer for the generator will result in a compile error about not being able to declare a mutable function pointer. To fix this, simply wrap your function pointer in a lambda.

Definition at line 42 of file Functional.h.

◆ returnsIfEqualTo()

template<typename T >
auto returnsIfEqualTo ( t)

Makes a unary function object that will return true if the argument is equal to t. (ie. the result of operator==) A copy of t is made and stored in the function object.

Definition at line 108 of file Functional.h.