blaze::AddTrait< T1, T2, typename > Struct Template Reference

Base template for the AddTrait class. More...

#include <AddTrait.h>

Detailed Description

template<typename T1, typename T2, typename>
struct blaze::AddTrait< T1, T2, typename >

Base template for the AddTrait class.

General

The AddTrait class template offers the possibility to select the resulting data type of a generic addition operation between the two given types T1 and T2. AddTrait defines the nested type Type, which represents the resulting data type of the addition. In case the two types T1 and T2 cannot be added, a compilation error is created. Note that const and volatile qualifiers and reference modifiers are generally ignored.


Creating custom specializations

AddTrait is guaranteed to work for all built-in data types, complex numbers, all vector and matrix types of the Blaze library (including views and adaptors) and all data types that provide an addition operator (i.e. operator+). In order to add support for user-defined data types that either don't provide an addition operator or whose addition operator returns a proxy object instead of a concrete type (as it is for instance common in expression template libraries) it is possible to specialize the AddTrait template. The following example shows the according specialization for the addition between two dynamic column vectors:

template< typename T1, typename T2 >
struct AddTrait< DynamicVector<T1,columnVector>, DynamicVector<T2,columnVector> >
{
using Type = DynamicVector< typename AddTrait<T1,T2>::Type, columnVector >;
};


Examples

The following example demonstrates the use of the AddTrait template, where depending on the two given data types the resulting data type is selected:

template< typename T1, typename T2 > // The two generic types
typename AddTrait<T1,T2>::Type // The resulting generic return type
add( const T1& t1, const T2& t2 ) //
{ // The function 'add' returns the sum
return t1 + t2; // of the two given values
} //

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