Re: templated constanst
I just read the "limits" header (included with visual 2003), and it
uses the macro :
#define _STCONS(ty, name, val) static const ty name = (ty)(val)
to declare numeric_limits member variables like has_infinity,
is_integer, etc, inside a struct declaration...
I wrote this simple code using such macro and the limits class
inheritance, and it does not compile...
#define MY_STCONS(ty, name, val) static const ty name = (ty)(val)
namespace mystd {
struct num_base
{
MY_STCONS(bool, is_bounded, false);
MY_STCONS(bool, is_exact, false);
};
template <class T>
struct num_procs : public num_base
{
inline static foo() { return T(0); }
};
struct num_int_base : public num_base
{
MY_STCONS(bool, is_bounded, false);
MY_STCONS(bool, is_exact, false);
};
template <> struct num_procs<int> : public num_int_base
{
typedef int T;
inline static foo() { return T(20); }
};
Carl Barron ha escrito:
In article <1149872688.630467.262110@h76g2000cwa.googlegroups.com>,
Javier Loureiro <derethorspam@gmail.com> wrote:
how can I write this template without a static member?
-- header --
template <typename Scalar>
struct A
{
static Scalar MAX_VALUE;
};
-- explict instance --
A<float>::MAX_VALUE = FLT_MAX;
A<double>::MAX_VALUE = DBL_MAX;
using it like:
double v = Math<double>::MAX_VALUE;
It?s the only static dependency for my algebra template class...
static member functions ok?? they can be written and not require
separate initialization.
why not use std::numeric_limits<type> or its approach to provide
functions to provide the results as they are not compile time constants
template <class T> class A;
template <> class A<float> {static float max() {return FLT_MAX;}};
template <> class A<double> {static double max() const {return
DBL_MAX;}};
//etc.
// usage: double v = A<double>::max();
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]