$search

Containers

Overview

Containers have a few properties in common that can simplify the passing of or the development of methods that use generic containers. Rather than having a suite of overloaded functions, a simple template argument with a concept check will suffice for all variants.

CompilingLinking

Include the following at the top of any translation unit for which you are running compile time checks on your blueprint classes.

#include <ecl/concepts.hpp>

using ecl::ContainerConcept;
using ecl::DynamicContainerConcept;
using ecl::UnsignedByteContainerConcept;
using ecl::SignedByteContainerConcept;

Since it only uses macros and templatised objects, no linking is required for just this feature.

Concept Definition

Classes passing the ContainerConcept must satisfy:

Dynamic Containers

Classes passing the DynamicContainerConcept must additionally satisfy:

Byte Containers

In addition, if it is testing for a byte container, then it will do a check on the value type in the container and fail if it is not a char (uses a trick via specialisations and private constructors to ensure a compile time failure).

Usage

Use with the compile time concept check whenever you wish to check for a container template class.

    template<typename T>
    void f(const T& container) {
        compile_time_concept_check(ContainerConcept<T>);
        unsigned int size = container.size();
        //...
    }
    template<typename T>
    void g(const T& byte_container) {
        compile_time_concept_check(SignedByteContainerConcept<T>);
        unsigned int size = container.size();
        char c = container[0];
        //...
    }
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Friends Defines


ecl_concepts
Author(s): Daniel Stonier (d.stonier@gmail.com)
autogenerated on Fri Mar 1 15:20:43 2013