Sacado  Development
 All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator Friends Pages
Classes | Public Types | Public Member Functions | List of all members
Sacado::TemplateContainer< TypeSeq, ObjectT > Class Template Reference

Container class to manager template instantiations of a template class. More...

#include <Sacado_TemplateContainer.hpp>

Classes

struct  DefaultBuilderOp
 The default builder class for building objects for each ScalarT. More...
 

Public Types

typedef TypeSeq types
 Type sequence containing template types.
 

Public Member Functions

 TemplateContainer ()
 Default constructor.
 
 ~TemplateContainer ()
 Destructor.
 
template<typename T >
Sacado::mpl::apply< ObjectT, T >
::type & 
get ()
 Get object corrensponding ObjectT<T>
 
template<typename T >
const Sacado::mpl::apply
< ObjectT, T >::type & 
get () const
 Get object corrensponding ObjectT<T>
 
template<typename BuilderOpT = DefaultBuilderOp>
void build (const BuilderOpT &builder)
 Build objects for each type T.
 

Detailed Description

template<typename TypeSeq, typename ObjectT>
class Sacado::TemplateContainer< TypeSeq, ObjectT >

Container class to manager template instantiations of a template class.

This class provides a generic container class for managing multiple instantiations of a class ObjectT<T> with the values of T specified through a type sequence. Objects of type ObjectT<T> must have value semantics, be default constructable and copyable/assignable (for objects that don't satisfy these requirements, one would typically wrap them in a (smart) pointer. Methods are provided to access the object of type ObjectT<T> for a given type T, as well as initialize them. One would typically operate on the contained objects using mpl::for_each(), e.g.,

template <class t>=""> class MyClass; typedef mpl::vector< double, Fad::DFad<double> > MyTypes; typedef TemplateContainer< MyTypes, MyClass<_> > MyObjects; MyObjects myObjects; mpl::for_each<MyObjects>([](auto x) { typedef decltype(x) T; myObjects.get<T>() = T; });

(Note: This requires generalized lambda's introduced in C++14. For C++11, provide a functor that implements the lambda body).


The documentation for this class was generated from the following file: