The class templates in <boost/integer/static_min_max.hpp> provide a compile-time evaluation of the minimum or maximum of two integers. These facilities are useful for generic programming problems.
namespace boost { template < long Value1, long Value2 > struct static_signed_min; template < long Value1, long Value2 > struct static_signed_max; template < unsigned long Value1, unsigned long Value2 > struct static_unsigned_min; template < unsigned long Value1, unsigned long Value2 > struct static_unsigned_max; }
The four class templates provide the combinations for finding the
minimum or maximum of two signed or unsigned
(long
) parameters, Value1 and Value2,
at compile-time. Each template has a single static data member,
value
, which is set to the respective minimum or maximum
of the template's parameters.
#include <boost/integer/static_min_max.hpp> template < unsigned long AddendSize1, unsigned long AddendSize2 > class adder { public: static unsigned long const addend1_size = AddendSize1; static unsigned long const addend2_size = AddendSize2; static unsigned long const sum_size = boost::static_unsigned_max<AddendSize1, AddendSize2>::value + 1; typedef int addend1_type[ addend1_size ]; typedef int addend2_type[ addend2_size ]; typedef int sum_type[ sum_size ]; void operator ()( addend1_type const &a1, addend2_type const &a2, sum_type &s ) const; }; //... int main() { int const a1[] = { 0, 4, 3 }; // 340 int const a2[] = { 9, 8 }; // 89 int s[ 4 ]; adder<3,2> obj; obj( a1, a2, s ); // 's' should be 429 or { 9, 2, 4, 0 } //... }
The program static_min_max_test.cpp is a simplistic demonstration of various comparisons using the compile-time extrema class templates.
Sometimes the minimum or maximum of several values needs to be found for later compile-time processing, e.g. for a bound for another class template.
The author of the Boost compile-time extrema class templates is Daryle Walker.
Revised October 12, 2001
© Copyright Daryle Walker 2001. Permission to copy, use, modify, sell and distribute this document is granted provided this copyright notice appears in all copies. This document is provided "as is" without express or implied warranty, and with no claim as to its suitability for any purpose.