c++ - How can I have the compiler use the smallest type in a template 'const' argument without C++11 for use with a (constrained) 8-bit micro-controller? -
i have template class use avr library. (quite basic) scheduler. constraint have as possible determined during compile-time. here's 1 (stripped-down) example:
template <const unsigned n> void foo::bar() { static unsigned k = n; ... }
the thing don't have use 2-byte unsigned integer when use smallest type fits. trouble can't (yet) use c++11 standard because avr compiler (the version of avr-gcc
i'm using 5.3.0) hasn't enabled part of standard. guess write same template function thrice type ranging uint8_t
uint32_t
don't either.
so question is: [how] can manage have compiler deduce shortest type const
argument of template function repeat
?
edited: initial title of question relied upon misunderstanding of auto
keyword. want know still remains: have compiler select shortest/fittest type const
template argument. why haven't used more appropriate title in first place? have no answer that, unfortunately.
the thing don't have use 2-byte unsigned integer when use smallest type fits, (if got right) auto does
this not @ auto
does. auto
deduces type declaration based on type of initialization expression. example, auto = 1
declares int
, , auto b = 1l
declares long, despite value 1 fitting within short
, or char
fine. deduction has nothing being smallest.
to answer question (in case else needs it), there boost_auto
macro, "emulates proposed auto keyword in c++" in words of documentation. so, that's asked for, suspect it's not want.
but, there thing in boost seem want: <boost/integer.hpp>
header has collection of templates allow integer type selection based on maximum required representable value.
Comments
Post a Comment