construct¶
Header¶
#include <boost/hof/construct.hpp>
Description¶
The construct
function returns a function object that will construct the
object when the called. A template can also be given, which it will deduce
the parameters to the template. The construct_meta
can be used to
construct the object from a metafunction.
Synopsis¶
// Construct by decaying each value
template<class T>
constexpr auto construct();
template<template<class...> class Template>
constexpr auto construct();
// Construct by deducing lvalues by reference and rvalue reference by reference
template<class T>
constexpr auto construct_forward();
template<template<class...> class Template>
constexpr auto construct_forward();
// Construct by deducing lvalues by reference and rvalues by value.
template<class T>
constexpr auto construct_basic();
template<template<class...> class Template>
constexpr auto construct_basic();
// Construct by deducing the object from a metafunction
template<class MetafunctionClass>
constexpr auto construct_meta();
template<template<class...> class MetafunctionTemplate>
constexpr auto construct_meta();
Semantics¶
assert(construct<T>()(xs...) == T(xs...));
assert(construct<Template>()(xs...) == Template<decltype(xs)...>(xs...));
assert(construct_meta<MetafunctionClass>()(xs...) == MetafunctionClass::apply<decltype(xs)...>(xs...));
assert(construct_meta<MetafunctionTemplate>()(xs...) == MetafunctionTemplate<decltype(xs)...>::type(xs...));
Requirements¶
MetafunctionClass must be a:
MetafunctionTemplate<Ts…> must be a:
T, Template<Ts..>, MetafunctionClass::apply<Ts…>, and MetafunctionTemplate<Ts…>::type must be:
MoveConstructible
Example¶
#include <boost/hof.hpp>
#include <cassert>
#include <vector>
int main() {
auto v = boost::hof::construct<std::vector<int>>()(5, 5);
assert(v.size() == 5);
}