|
Boost Users : |
From: hicks (hicks_at_[hidden])
Date: 2002-05-07 09:38:25
Hello
>I have some questions for you:
>1. Why are you so interested in the value of
>"typeid.name()"?
I'm not particulary interested in typeid::name() as an end result.
As I said in the letter, I have real task at hand, and condensed the
code so that anybody looking at it would be able to get to the point quickly.
I used typeid()::name() here as a means of demonstating the problem.
The result which is shown by typeid()::name() corresponds to the
result encountered in the real task, namely,
the next stage of processing is supposed to take place in
traits1<int, 1> but takes place in traits1<int, 0> instead.
In other words, the branching mechanism fails silently.
>2. Are you sure this isn't a compiler problem? What
>compiler(s) have you tried this on?
Borland Builder C++ 5.
Unfortunately, it's the only one to which I have access now.
It could well be a compiler problem.
Unless there are some rules which I don't understand.
If it is a compiler problem perhaps someone knows of a workaround.
I have tried various approaches to no avail.
Craig Hicks
Noel Yap wrote:
>--- hicks <hicks_at_[hidden]> <mailto:hicks_at_[hidden]> wrote:
>
>>Query regarding the use/limitiations of traits in
>>metaprogramming
>>
>>I am trying to use traits pattern to assist in
>>metaprogramming.
>>I have the following problem.
>>
>>A traits class "trait" defers a decision to another
>>traits class
>>"trait1" depending
>>on the result of a third traits class "traita".
>>However, the compiler does not cooperate.
>>The code below excutes but gives unexpected output
>>(also shown).
>>
>>[Note:: The code has been reduced to the minimal to
>>demonstrate the problem.
>>I have a real task at hand not shown here.]
>>
>>template <class T>
>>struct traita { BOOST_STATIC_CONSTANT(int, value=0);
>>};
>>template <>
>>struct traita<int> { BOOST_STATIC_CONSTANT(int,
>>value=1); };
>>
>>template <class T, int>
>>struct trait1 {};
>>
>>
>>template <class T>
>>struct trait
>>{
>> BOOST_STATIC_CONSTANT(int,
>>value=traita<T>::value);
>> typedef trait1<
>>;T, value> t1;
>>};
>>
>>
>>
>>int main(int argc, char* argv[])
>>{
>> std::cout
>> << typeid(trait<int>::t1).name()
>> << std::endl
>> << trait<int>::value
>> << std::endl
>> ;
>> return 0;
>>}
>>
>>output::
>>
>>trait1<int,0>
>>1
>>
>>It would be nice if the first line of output were
>>"trait1<int, 1>", but
>>it isn't.
>>
>>Any assistance would be greatly appreciated.
>>
>
>I have some questions for you:
>1. Why are you so interested in the value of
>"typeid.name()"?
>2. Are you sure this isn't a compiler problem? What
>compiler(s) have you tried this on?
>
>Noel
>
>
>__________________________________________________
>Do You Yahoo!?
>Yahoo! Health - your guide to health and wellness
>http://health.yahoo.com
>
>
>
>Info: <http://www.boost.org>
>Wiki: <http://www.crystalclearsoftware.com/cgi-bin/boost_wiki/wiki.pl>
>Unsubscribe: <mailto:boost-users-unsubscribe_at_[hidden]>
>
>
>Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/
>
>
>
>
>
[Non-text portions of this message have been removed]
Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net