Re: namespace vs static member functions
Drew Hall <ahall@ll.mit.edu> wrote:
On Mar 27, 5:38 pm, Carl Barron <cbarron...@adelphia.net> wrote:
Another differences that there are templated classes/structs and there
are no templated namespaces. This could be the decider in many
situations.
No, but there are template functions within a namespace.
At some level there's not much difference between:
Namespace::Function<Type>(...);
and
Class<Type>::Function(...);
That said, I definitely lean towards using a namespace for reasons
others have mentioned...
Cheers,
Drew
It all depends on if you want large conditional compilation segmenets
or simple ones.
namespace endian_stuff
{
template <int N1,int N2,int N3,int N4>
struct swapper
{
static void swap_bytes(unsigned char *,unsigned char *);
static void un_swap_bytes(unsigned char *,unsigned char *);
};
template <bool Castable>
struct chooser
{
static const int value = (sizeof(unsigned long <=4)
?sizeof(unsigned long):0;
};
teemplate <> struct chooser<false>
{ static const int value = 0;};
template<int N1,int N2,int N3,int N4,int S> struct selection;
template <int N1,int N2,int N3,int N4>
struct selection<N1,N2,N3,N4,1>{};
// same for last parameter = 2 and 3.
template <int N1,int N2,int N3,int N4
struct selection<N1,N2,N3,N4,0>:private swapper<N1,N2,N3,N4>
{
// separate into unchar's via arithmetic.
static unsigned long encode(unsigned long);
static unsigned long decode(Unsigene long);
};
// sizeof(unsigned long == 4 and casting works
template <int N1,int N2,int N3,int N4.4>
struct selection<N1,N2,N3,N4,4>:private swapper<N1,N2,N3,N4>
{
// impliment encode and decode using casts.
static unsigned long encode(unsigned long);
static unsigned long decode(unsigned long);
};
}
template <Int N1,int N2,int N3,int N4,bool Castable = true>
struct basic_endian:endian stuff::selection
<N1,N2,N3,N4,endian_stuff::chooser<Castable>::value>
{
};
noe single typedef of the form
typedef basic_endian<...> endian;
is all that is needed to be conditionally compiled. and the proper
encoding and decoding procedures will be compiled. If 1 <=
sizeof(unsigned long) <= 3 the compilation will fail.
endian_stuff::selection will then not have proprer functions declared.
still assumes CHAR_BIT == 8, in the full coded version. Using just
namespaces and template functions alone. is a lot messier, if only the
correct
function is to be selected at compile time.
--
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]