home *** CD-ROM | disk | FTP | other *** search
/ NetNews Usenet Archive 1992 #26 / NN_1992_26.iso / spool / comp / lang / cplus / 15846 < prev    next >
Encoding:
Text File  |  1992-11-06  |  1.6 KB  |  90 lines

  1. Path: sparky!uunet!news.encore.com!csar!foxtail!sdd.hp.com!elroy.jpl.nasa.gov!ames!agate!doc.ic.ac.uk!uknet!mcsun!inesc.inesc.pt!inesc!tac
  2. From: tac@rena.world (Telmo A. Carmo)
  3. Newsgroups: comp.lang.c++
  4. Subject: pointer to member in MSC 7.0
  5. Message-ID: <TAC.92Nov5183853@rena.world>
  6. Date: 5 Nov 92 18:38:53 GMT
  7. Sender: usenet@inesc.pt (USENET News System)
  8. Distribution: comp.lang.c++
  9. Organization: INESC
  10. Lines: 77
  11. Nntp-Posting-Host: rena.inesc.pt
  12.  
  13.  
  14. How does one implement a pointer to a member function
  15. in MSC 7.0 
  16. I am not able to use pointers to derived class member functions
  17.  
  18. here is a small example:
  19. ----------------------
  20.  
  21. #include <stdio.h>
  22.  
  23. class Object;
  24.  
  25. /* Arg! beacuse MSC 7 doesn't allow 
  26.  typedef long (Object::*method)(); before class definition
  27.   have to use a define
  28. */
  29.  
  30. //#define mt long (Object::*)()
  31.  
  32.  
  33. class Object {
  34. public:
  35.     int get() { return 2234;}
  36.     long perform(long (Object::*)(),long);
  37.     //long perform(mt,long);
  38. };
  39.  
  40. //#undef mt
  41.  
  42. typedef long (Object::*method)();
  43. typedef long (Object::*method1)(long);
  44.  
  45. class AA : public Object {
  46. public:
  47.     long test(long v);
  48.     void Do(method,long);
  49. };
  50.  
  51.  
  52. long Object::perform(method m,long v)
  53. {
  54.     method1 q = (method1)m;
  55.     return (this->*q)(v);
  56. }
  57.  
  58. void AA::Do(method m,long v)
  59. {
  60.     perform(m,v);
  61. }
  62.  
  63. long AA::test(long v)
  64. {
  65.     printf("ld=%ld\n",v); return 0l;
  66. }
  67.  
  68. main()
  69. {
  70.     AA ole;
  71.     
  72.     method m = (method)&AA::test;
  73.     /*  ^-- ERROR */
  74.     ole.Do(m,(long)23);
  75.     return 0;
  76. }
  77.  
  78. /*
  79. yy.cpp
  80. yy.cpp(47) : error C2642: cast to pointer to member must be 
  81.                 from related pointer to member
  82.  
  83. */
  84.  
  85. How do I make this work?
  86.  
  87.     Thanks for any help.
  88.  
  89.     Telmo Carmo
  90.