[comp.lang.c++] Problem with C++ and passing a instance member function

jmellby@m2.csc.ti.com (John Mellby) (02/07/91)

This question is related to the question several weeks ago (sorry, I lost the
original msg) on passing member functions as parameters.  

I have to interface with routines (X Window System routines which I cannot
change) which require a function as input.  I would like to simply pass in
a member function on a specific object (like a.print_c() as below).  This
function needs to perform actions specific to its object (a).
However, as has been stated before, this isn't possible.

The original solutions involved using a static member function which didn't
have an implicit "this" pointer and thus could be passed as parameters.
In my case I managed to pass not only the static member function, but
a pointer to the specific object as well.  Then the static member function
operated on the pointer which had the same effect as if I had been able
to pass in &a.print_c!

What I want to know, is this solution legal in general, or is it only this
compiler (SunOS 4.1, Sparcstation 1+, Cfront 2.1) that makes this legal?

The code which I tested is:

#include <iostream.h>

class test_static;

void apply(test_static *ts, void (*function)(test_static *))
{
  function(ts);
}

class test_static {
private:
  char *str;
public:
  test_static(char *s) { str = s; };
  // Because this is static, there is no implicit "this" function
  // and this can be passed.
  static void print_c(test_static * ts) { cout << ts->str << "\n"; };
};

main()
{
  test_static a("test data 1");
  test_static b("test info 2");
  apply( &a, &(test_static::print_c) );
  apply( &b, &test_static::print_c );
}

// The program results are:
test data 1
test info 2

John R. Mellby                       Texas Instruments
jmellby@skvax1.ti.com                P.O.Box 869305, MS 8513
                                     Plano, Texas, 75266
(214)517-5370 <home>                 (214)575-6774
****************************************************************************
* A friend who used to work at <research lab> related a story
* about a customer support line at <company>.  The support person said
* something on the order of "You're not our only customer, you know," to which
* his reply was, "But we're one of the few with tactical nuclear weapons."
*  - from USENET
****************************************************************************