Boost logo

Boost :

From: Robert Klarer (klarer_at_[hidden])
Date: 2002-06-21 22:11:19


Paul Mensonides wrote:

> > Yes, but many compilers support a 64-bit long long type, so a
> seven_letter_word
> > template is possible. Seven letters should be enough for anyone. :-)
>
> Unless I'm mistaken, a multi-character literal is of type 'int', though.

Sorry, I was referring to the three_letter_word template example, which didn't use
a multibyte character.

I just realized that strings of arbitrary length can be represented portably this
way:

#include <stdio.h>

typedef unsigned long letter;

template <letter l1 = 0,
          letter l2 = 0,
          letter l3 = 0,
          letter l4 = 0,
          letter l5 = 0,
          letter l6 = 0,
          letter l7 = 0,
          letter l8 = 0,
          letter l9 = 0>
struct nine_letter_word {
   static const char pointer [];
};

template <letter l1,
          letter l2,
          letter l3,
          letter l4,
          letter l5,
          letter l6,
          letter l7,
          letter l8,
          letter l9>
const char nine_letter_word<l1, l2, l3, l4, l5, l6, l7, l8, l9>::pointer[]
   = { l1, l2, l3, l4, l5, l6, l7, l8, l9, 0 };

int main() {
   nine_letter_word<'H', 'a', 'b', 'a', 'n', 'e', 'r', 'o', '.'> w;
   printf("%s\n", w.pointer);
}


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk