Re: Future of C++
Alex wrote:
On Aug 7, 7:01 am, Felipe Magno de Almeida
<felipe.m.alme...@gmail.com> wrote:
It is been like two years ago. The code was something like this:
struct base
{
virtual std::type_info& get_type() const = 0;
};
struct derived1
{
std::type_info& get_type() const { return typeid(*this); }
};
struct derived2
{
std::type_info& get_type() const { return typeid(*this); }
};
You have probably meant
struct derived1 : public base { ... }
and possibly
const std::type_info& get_type() const { ... }
Given that, could you explain what exactly is the problem with the
example you have provided above? To me, it looks like a logical thing
to do when you want to discover the derived type and you only have
access to the base pointer or reference. It is usually faster than
dynamic_cast.
Why all the complication, when you can simply do
typeid(*pb); /* where pb is a pointer to the base class */
The standard guarantees that this yields the type_info for the most
derived class, if the base class is polymorphic.
I know very well how boost.any works and I don't know
what it has to do with what I wrote.
Here's a snippet from boost::any:
class any
{
...
const std::type_info & type() const
{
return content ? content->type() : typeid(void);
}
...
template<typename ValueType>
class holder : public placeholder
{
...
virtual const std::type_info & type() const
{
return typeid(ValueType);
}
...
};
};
Since OgreAny is a carbon-copy of boost::any, it seems to have a lot
with what you wrote.
There is a subtle, but important difference in the two examples.
In the example given by Felipe, the derived class returns the type_info
of *itself*. This is completely useless, as the client code can obtain
the exact same information without a virtual function call.
In the boost::any code, the holder class returns the type_info for *the
class it contains* and is instantiated upon. This information is not
obtainable in any other way.
See
http://www.ogre3d.org/docs/api/html/OgreAny_8h-source.html
http://svn.boost.org/svn/boost/trunk/boost/any.hpp
Alex
Bart v Ingen Schenau
--
a.c.l.l.c-c++ FAQ: http://www.comeaucomputing.com/learn/faq
c.l.c FAQ: http://c-faq.com/
c.l.c++ FAQ: http://www.parashift.com/c++-faq-lite/
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]