Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.c++ > #6807
| From | "MikeP" <mp011011@some.org> |
|---|---|
| Newsgroups | comp.lang.c++ |
| Subject | Re: Integer promotions, conversions, coercions and templates :( (Conclusion) |
| Date | 2011-06-16 09:45 -0500 |
| Organization | A noiseless patient Spider |
| Message-ID | <itd4u2$34g$1@dont-email.me> (permalink) |
| References | <isorvh$sre$1@dont-email.me> <it8r83$4bv$1@dont-email.me> <93956ef8-85ef-4805-81a9-794694d2d5d5@u19g2000vbi.googlegroups.com> <itaeuo$ljn$2@dont-email.me> <84a9f141-c56d-4a72-92d0-bd1250397901@q17g2000vby.googlegroups.com> |
Michael DOUBEZ wrote:
> On 15 juin, 16:17, "MikeP" <mp011...@some.org> wrote:
>> Michael DOUBEZ wrote:
>>> On 15 juin, 01:35, "MikeP" <mp011...@some.org> wrote:
>>>> I opted for a preprocessor macro approach (I used the "super macro"
>>>> technique) to implement the actual code alluded to by the example.
>>>> I feel that aberrating the algorithm with C++-isms to make up for
>>>> the deficiencies in the language is an inferior solution to the
>>>> macro approach.
>>
>>> AFAIS many solutions have been proposed.
>>
>> All rejected, in the end though.
>>
>>> Clearly stating the desired
>>> result would have helped.
>>
>> Surely it was clear that what desired was a "template" to generate a
>> very finite set of bit field classes. Efficiency counts for such. If
>> elegance of implementation surfaced as another requirement (indeed,
>> that made the macro approach trump the template approaches offered,
>> in the end), so be it. I think that this is a good case study.
>
> From experience, I find the super macro approach less elegant; reading
> inside a macro definition is quite a pain. And the functions are not
> caught by code analyzers.
It's for precise usage, not general usage in place of templates.
>
>>
>>>> Remember, that the example was not the actual code (the actual
>>>> code is a class and the example is indicative of one of the methods
>>>> of that class), and that the example suffers even more ills caused
>>>> by the inferior/deficient/incorrect C++ type system. Note that the
>>>> point was to generate 4 different definitions of the class
>>>> (function, in the example) for use and not meant to be a template
>>>> or macro to be used directly.
>>
>>> You can use - not yet standard - static_assert() and - tr1 standard
>>> - is_unsigned to limit the range of template parameter type:
>>
>>> template <typename T, unsigned int W = numeric_limit<T>::digits >
>>> bool CheckBit(T& mask, unsigned n)
>>> {
>>> static_assert( is_integral<T>::value && is_unsigned<T>::value );
>>> // assert n in range
>>> const T mask_n = T(1) << (n-1ui32);
>>> return mask & mask_n != 0;
>>> }
>>
>> How is that more clear than using zero and the width of the unsigned
>> integer type in the assertion?
>
> The static assert ensures the range of template type parameters is
> limited to unsigned integral type.
Too much machinery for such a simple need. Too obfuscating also.
>
>> (Aside: I have a problem with succumbing to "T(1)" instead of "1uiXX"
>> just to get type consistency, that's why I like the macro better).
>
> Funny how c++ literal constants where designed for avoiding writing
> the type and that they would be now required.
The underlying type system does not play nice with the things sitting on
top of it.
>
>>> And use your super macro for generating the
>>> inline bool CheckBit8(uin8& mask, unsigned n)
>>> {
>>> return CheckBit<uint8,8>(mask,n)
>>> }
>>> ...
>>
>>> Better to put as little as possible in the macro.
>>
>> I have used the "generate unique names with a macro for macro-based
>> templates so much though, that it is a well-tested and accepted
>> technique.
>
> And one I use extensively together with code generation of the super
> macro. And even after two years of using it, I find it unclear, hard
> to debug and a pain to read.
Don't know what to tell ya. It works great for me. Nary a problem. Super
macros allow stepping into and debugging whereas a traditional macro (all
on one line with line continuation chars) are hard to debug. I probably
have a more evolved way of handling the issues.
>>> But, it shouldn't fail on unsigned type.
>>
>> Oh? You don't think that overloading a function on only all of the
>> unsigned integer types will be a problem?
>
> Not if you forbid the overload on the signed types (my making them
> private by example).
> Note that static_assert() makes the compilation fails on signed types.
Signed types are not an issue in this case, per se. Implicit
conversions/coercions/promotions are the issue in regards to overloaded
functions.
>> It looks like an oversight (problem unaddressed) to design a generic
>> type mechanism and not address literals within that mechanism. I
>> think that pretty much characterizes the issue in the use case
>> scenario in this thread.
>
> What syntax would you propose ?
I have a short-term solution (macros). While the issue should probably be
addressed, it can't really be fixed, only band-aided over. Perhaps
something that allows templates to have some text-substitution
capabilities is in order. Consider:
template <typename T>
class MyClass
{
T x;
public:
T To##T(){ return x; }
};
Back to comp.lang.c++ | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
Integer promotions, conversions, coercions and templates :( "MikeP" <mp011011@some.org> - 2011-06-08 17:09 -0500
Re: Integer promotions, conversions, coercions and templates :( Ian Collins <ian-news@hotmail.com> - 2011-06-09 10:22 +1200
Re: Integer promotions, conversions, coercions and templates :( "MikeP" <mp011011@some.org> - 2011-06-08 17:49 -0500
Re: Integer promotions, conversions, coercions and templates :( "MikeP" <mp011011@some.org> - 2011-06-08 19:13 -0500
Re: Integer promotions, conversions, coercions and templates :( Ian Collins <ian-news@hotmail.com> - 2011-06-09 14:32 +1200
Re: Integer promotions, conversions, coercions and templates :( "MikeP" <mp011011@some.org> - 2011-06-09 07:30 -0500
Re: Integer promotions, conversions, coercions and templates :( Öö Tiib <ootiib@hot.ee> - 2011-06-09 06:18 -0700
Re: Integer promotions, conversions, coercions and templates :( "MikeP" <mp011011@some.org> - 2011-06-09 08:45 -0500
Re: Integer promotions, conversions, coercions and templates :( Öö Tiib <ootiib@hot.ee> - 2011-06-09 06:51 -0700
Re: Integer promotions, conversions, coercions and templates :( "MikeP" <mp011011@some.org> - 2011-06-09 13:44 -0500
Re: Integer promotions, conversions, coercions and templates :( Ian Collins <ian-news@hotmail.com> - 2011-06-10 07:37 +1200
Re: Integer promotions, conversions, coercions and templates :( "MikeP" <mp011011@some.org> - 2011-06-09 15:11 -0500
Re: Integer promotions, conversions, coercions and templates :( Ian Collins <ian-news@hotmail.com> - 2011-06-10 09:09 +1200
Re: Integer promotions, conversions, coercions and templates :( "MikeP" <mp011011@some.org> - 2011-06-09 17:15 -0500
Re: Integer promotions, conversions, coercions and templates :( Ian Collins <ian-news@hotmail.com> - 2011-06-10 10:40 +1200
Re: Integer promotions, conversions, coercions and templates :( "MikeP" <mp011011@some.org> - 2011-06-10 05:07 -0500
Re: Integer promotions, conversions, coercions and templates :( Öö Tiib <ootiib@hot.ee> - 2011-06-10 03:14 -0700
Re: Integer promotions, conversions, coercions and templates :( Öö Tiib <ootiib@hot.ee> - 2011-06-10 03:19 -0700
Re: Integer promotions, conversions, coercions and templates :( "MikeP" <mp011011@some.org> - 2011-06-10 06:08 -0500
Re: Integer promotions, conversions, coercions and templates :( Öö Tiib <ootiib@hot.ee> - 2011-06-10 04:32 -0700
Re: Integer promotions, conversions, coercions and templates :( "MikeP" <mp011011@some.org> - 2011-06-10 07:14 -0500
Re: Integer promotions, conversions, coercions and templates :( Öö Tiib <ootiib@hot.ee> - 2011-06-10 05:27 -0700
Re: Integer promotions, conversions, coercions and templates :( "MikeP" <mp011011@some.org> - 2011-06-10 07:35 -0500
Re: Integer promotions, conversions, coercions and templates :( Öö Tiib <ootiib@hot.ee> - 2011-06-10 06:47 -0700
Re: Integer promotions, conversions, coercions and templates :( "MikeP" <mp011011@some.org> - 2011-06-10 06:18 -0500
Re: Integer promotions, conversions, coercions and templates :( Ian Collins <ian-news@hotmail.com> - 2011-06-11 08:08 +1200
Re: Integer promotions, conversions, coercions and templates :( "MikeP" <mp011011@some.org> - 2011-06-10 18:41 -0500
Re: Integer promotions, conversions, coercions and templates :( "MikeP" <mp011011@some.org> - 2011-06-10 08:11 -0500
Re: Integer promotions, conversions, coercions and templates :( Öö Tiib <ootiib@hot.ee> - 2011-06-09 06:28 -0700
Re: Integer promotions, conversions, coercions and templates :( "MikeP" <mp011011@some.org> - 2011-06-09 08:50 -0500
Re: Integer promotions, conversions, coercions and templates :( (Summary so far) "MikeP" <mp011011@some.org> - 2011-06-10 08:40 -0500
Re: Integer promotions, conversions, coercions and templates :( (Summary so far) Öö Tiib <ootiib@hot.ee> - 2011-06-10 07:14 -0700
Re: Integer promotions, conversions, coercions and templates :( (Summary so far) "MikeP" <mp011011@some.org> - 2011-06-10 09:17 -0500
Re: Integer promotions, conversions, coercions and templates :( (Summary so far)(Corrections and more) "MikeP" <mp011011@some.org> - 2011-06-10 09:14 -0500
Re: Integer promotions, conversions, coercions and templates :( (Results: Generated Code) "MikeP" <mp011011@some.org> - 2011-06-10 12:43 -0500
Re: Integer promotions, conversions, coercions and templates :( (Conclusion) "MikeP" <mp011011@some.org> - 2011-06-14 18:35 -0500
Re: Integer promotions, conversions, coercions and templates :( (Conclusion) Ian Collins <ian-news@hotmail.com> - 2011-06-15 12:51 +1200
Re: Integer promotions, conversions, coercions and templates :( (Conclusion) "MikeP" <mp011011@some.org> - 2011-06-15 08:45 -0500
Re: Integer promotions, conversions, coercions and templates :( (Conclusion) Michael DOUBEZ <michael.doubez@free.fr> - 2011-06-15 03:33 -0700
Re: Integer promotions, conversions, coercions and templates :( (Conclusion) "MikeP" <mp011011@some.org> - 2011-06-15 09:17 -0500
Re: Integer promotions, conversions, coercions and templates :( (Conclusion) Michael DOUBEZ <michael.doubez@free.fr> - 2011-06-16 04:17 -0700
Re: Integer promotions, conversions, coercions and templates :( (Conclusion) "MikeP" <mp011011@some.org> - 2011-06-16 09:45 -0500
Re: Integer promotions, conversions, coercions and templates :( (Conclusion) Michael DOUBEZ <michael.doubez@free.fr> - 2011-06-17 01:56 -0700
Re: Integer promotions, conversions, coercions and templates :( (Conclusion) "MikeP" <mp011011@some.org> - 2011-06-17 07:58 -0500
Re: Integer promotions, conversions, coercions and templates :( (Conclusion) Michael DOUBEZ <michael.doubez@free.fr> - 2011-06-17 06:54 -0700
Re: Integer promotions, conversions, coercions and templates :( (Conclusion) "MikeP" <mp011011@some.org> - 2011-06-17 09:19 -0500
Re: Integer promotions, conversions, coercions and templates :( (Conclusion) "MikeP" <mp011011@some.org> - 2011-06-17 08:17 -0500
Re: Integer promotions, conversions, coercions and templates :( (Conclusion) Michael DOUBEZ <michael.doubez@free.fr> - 2011-06-17 07:33 -0700
Re: Integer promotions, conversions, coercions and templates :( (Conclusion) "MikeP" <mp011011@some.org> - 2011-06-17 09:49 -0500
csiph-web