Boost logo

Boost :

From: Tobias Schwinger (tschwinger_at_[hidden])
Date: 2005-06-30 04:32:54


Greer, Joe wrote:
>>From: David Abrahams <dave_at_[hidden]>
>>
>>>Rob Stewart <stewart_at_[hidden]> writes:
>>>
>>>> When classifying types, it is often necessary to test for any
>>>> one of several variations of an aspect. A common case is
>>>> ignoring an aspect which means to allow a match for any
>>>> variation of that aspect
>>>
>
> Please excuse me for jumping into the middle of this discussion. I am
> only a budding metaprogrammer, so that influences how I read things like
> this, so bear with me. With this phrasing,

I don't believe it's metaprogramming specific -- let's clear up the logic, first:

> it is unclear to me whether
> the common case is "ignoring an aspect" or if it is really "allowing a
> match for any variation of an aspect"

Given a variable 'a' which can be either '1', '2' or '3' it doesn't make a difference:

    if ((a == 1) || (a == 2) || (a == 3)) // match any variation of a
    {
      // do something
    }

is logically equivalent to

    // no if -- just ignore a
    {
      // do something
    }

> which I can do by "ignoring an
> aspect."
>

Equivalence is commutative:

You can ignore 'a' by allowing any variation and you can allow any variation by
ignoring 'a' -- no difference, again.

Making any difference would be talking about implementation details in a parapraph
about plain logic.

>
>>Neither quoted sentence seems long or complex. Perhaps there
>>was something you snipped to which you were referring?
>>
>>Here's the full text of my suggestion:
>>
>> When classifying types, it is often necessary to test for any
>> one of several variations of an aspect. A common case is
>> ignoring an aspect which means to allow a match for any
>> variation of that aspect and is only useful when also testing
>> for other aspects. Ignoring an aspect means using an
>> "unspecified_*" tag. For example, allowing a match for any
>> decoration requires using the <tt>unspecified_decoration</tt>
>> tag.
>>

I have the following problems with this:
- it's too long
- 80% focusses on a special case
- it's not true that it only makes sense when testing for other aspects

>
>
> In this paragraph, you are telling me that "ignoring an aspect" is
> "allow a match for any variation of that aspect" (sentence 2) and that
> "ignoring an aspect" is "using an "unspecified_*" tag" (sentence 3).
> The use of "means" in both sentences is awkward. It is also unclear
> that "allow a match for any variation of that aspect" is actually the
> same as "using an unspecified_* tag."
>
> I tend to be more conversational in my writing, but I would be tempted
> to write something like:
>
> When classifying types, it is often necessary to test for any one of
> several variations of an aspect. A common case is allowing a match for
> any variation of an aspect. This is done by ignoring that aspect and is
> implemented by using an "unspecified_*" tag. For example, to allow a
> match
> For any decoration would require using the
> <tt>unspecified_decoration</tt> tag.

This one suffers similar problems:

>
> I just wanted to throw in my $.02. I'll go back into lurker mode now.
> :)
>

OK, here is my current top-candidate:

    When classifying types it is often necessary to match against
    several variations of one aspect.

    There are special variations which make this possible. These are called
    *abstract*.

    The most important case is to match any variation; that is, to ignore
    that aspect in the context of type classification. Because of this, every
aspect has at
    least one abstract variation named "unspecified_" plus the aspect name.


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