How to call a function by a string of name & How to get the name of aclass?

Discussion in 'C++' started by cutecutemouse, Jul 3, 2008.

  1. ---------------------------This is my
    task:--------------------------------------
    There are hundred of similar classes and a large file(in processing)
    with thousand of instances of these classes. I should export these
    instances into a XML file (I use Tiny XML), however not total
    instances, but these which belong to the selected classes and the
    selected attributes(member variable and value). In advance, I will
    have a configuration file (also XML format), to define which classes
    and which attributes we need, that is a user-defined file.
    The problem are:

    1, How do I get the name of a class? Just like by Java the
    method .getclass() or instanceof ?

    2, Is it possible to have such as an iterator to traverse through
    all the variables/functions, to only call the functions and to get
    the values of variables we need by name?

    Thank you very much for your reply, indeed.
     
    cutecutemouse, Jul 3, 2008
    #1
    1. Advertising

  2. Re: How to call a function by a string of name & How to get the name of a class?

    cutecutemouse <> writes:

    > ---------------------------This is my
    > task:--------------------------------------
    > There are hundred of similar classes and a large file(in processing)
    > with thousand of instances of these classes. I should export these
    > instances into a XML file (I use Tiny XML), however not total
    > instances, but these which belong to the selected classes and the
    > selected attributes(member variable and value). In advance, I will
    > have a configuration file (also XML format), to define which classes
    > and which attributes we need, that is a user-defined file.
    > The problem are:
    >
    > 1, How do I get the name of a class? Just like by Java the
    > method .getclass() or instanceof ?


    Using RTTI:

    template <class Class> std::string getClass(Class* object){
    return unmangle(typeid(*object).name());
    }

    You will have to implement the unmangle function for your compiler...


    > 2, Is it possible to have such as an iterator to traverse through
    > all the variables/functions, to only call the functions and to get
    > the values of variables we need by name?


    You'll get no help from C++, but it's possible.

    Here are two ways:

    - use the source (parse it, or use the UML model if you design your
    program from an UML CASE tool), and generate from it the meta
    objects needed to do it.

    - compile your program with a lot of debugging information (-ggdb3
    -gdwarf-2 etc), and then use these debugging information to do
    introspection at run-time, like any debugger would do it.

    Here is also a third way to solve your problem, since you know before
    hand what class and what member you need to access (from your xml
    configuration files), you can use them to generate the C++ code that
    will do the job.

    --
    __Pascal Bourguignon__
     
    Pascal J. Bourguignon, Jul 4, 2008
    #2
    1. Advertising

  3. Re: How to call a function by a string of name & How to get the nameof a class?

    I've found a third-party Reflection API "Reflex" for it. Thank you!

    On 4 Jul., 01:17, Sam <> wrote:
    > cutecutemouse writes:
    > > 1, How do I get the name of a class? Just like by Java the
    > > method .getclass() or instanceof ?

    >
    > > 2, Is it possible to have such as an iterator to traverse through
    > > all the variables/functions, to only call the functions and to get
    > > the values of variables we need by name?

    >
    > > Thank you very much for your reply, indeed.

    >
    > No, there is no equivalent of Java-like reflection classes in the standard
    > C++ language. The only thing that's available in the standard C++ language
    > is a facility for retrieve an "implementation-defined" name of the object's
    > class, which may not necessary be the human-readable class name.
    >
    > Having said that, your C++ compiler may or may not have its own
    > compiler-specific facilities for run-time type information that provides
    > more information than the C++ language standard requires. Check your
    > compiler's documentation for more information.
    >
    > application_pgp-signature_part
    > 1KHerunterladen
     
    cutecutemouse, Jul 13, 2008
    #3
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Alfred E Neuman
    Replies:
    3
    Views:
    278
    Alfred E Neuman
    Nov 4, 2003
  2. Amit_Basnak
    Replies:
    3
    Views:
    338
    =?iso-8859-1?q?Erik_Wikstr=F6m?=
    Jan 11, 2007
  3. Utku Altinkaya
    Replies:
    0
    Views:
    330
    Utku Altinkaya
    Aug 17, 2008
  4. ssb
    Replies:
    58
    Views:
    1,698
    Chris M. Thomasson
    Sep 14, 2009
  5. trans.  (T. Onoma)
    Replies:
    6
    Views:
    140
    trans. (T. Onoma)
    Oct 1, 2004
Loading...

Share This Page