So, I'm wishing to be able to have a static const compile
time struct that holds some value based on a string by using
templates. I only desire up to four characters. I know that
the type of 'abcd' is int, and so is 'ab','abc', and although
'a' is of type char, it works out for a template<int v> struct
What I wish to do is take sizes of 2,3,4,5 of some const char, "abcd"
and have the same functionality as if they used 'abcd'. Note that
I do not mean 1,2,3, or 4 because I expect the null terminator.
cout << typeid("abcd").name() << endl; tells me that the type for
this hard coded string is char const [5], which includes the null
terminator on the end.
I understand that I will need to twiddle the values as characters,
so they are represented as an integer.
I cannot use constexpr since VS10 does not support it (VS11 doesn't either..)
So, for example with somewhere this template defined, and later the last line
template <int v> struct something {
static const int value = v;
};
//Eventually in some method
cout << typeid(something<'abcd'>::value).name() << endl;
works just fine.
I've tried
template<char v[5]> struct something2 {
static const int value = v[0];
}
template<char const v[5]> struct something2 {
static const int value = v[0];
}
template<const char v[5]> struct something2 {
static const int value = v[0];
}
All of them build individually, though when I throw in my test,
cout << typeid(something2<"abcd">::value).name() << endl;
I get
'something2' : invalid expression as a template argument for 'v'
'something2' : use of class template requires template argument list
Is this not feasible or am I misunderstanding something?