home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1997 May / Pcwk0597.iso / borland / cb / setup / cbuilder / data.z / GENERIC.H < prev    next >
C/C++ Source or Header  |  1997-02-28  |  2KB  |  72 lines

  1. /*  generic.h -- for faking generic class declarations
  2.  
  3.     When type templates are implemented in C++, this will probably go away.
  4. */
  5.  
  6. /*
  7.  *      C/C++ Run Time Library - Version 8.0
  8.  *
  9.  *      Copyright (c) 1990, 1997 by Borland International
  10.  *      All Rights Reserved.
  11.  *
  12.  */
  13. /* $Revision:   8.1  $ */
  14.  
  15. #ifndef __cplusplus
  16. #error Must use C++ for classes
  17. #endif
  18.  
  19. #ifndef __GENERIC_H
  20. #define __GENERIC_H
  21.  
  22. #if !defined(___DEFS_H)
  23. #include <_defs.h>
  24. #endif
  25.  
  26. #if !defined(RC_INVOKED)
  27.  
  28. #if defined(__STDC__)
  29. #pragma warn -nak
  30. #endif
  31.  
  32. #endif
  33.  
  34. // token-pasting macros; ANSI requires an extra level of indirection
  35. #define _Paste2(z, y)       _Paste2_x(z, y)
  36. #define _Paste2_x(z, y)     z##y
  37. #define _Paste3(z, y, x)    _Paste3_x(z, y, x)
  38. #define _Paste3_x(z, y, x)  z##y##x
  39. #define _Paste4(z, y, x, w) _Paste4_x(z, y, x, w)
  40. #define _Paste4_x(z, y, x, w)   z##y##x##w
  41.  
  42. // macros for declaring and implementing classes
  43. #define name2 _Paste2
  44. #define declare(z, y) _Paste2(z, declare)(y)
  45. #define implement(z, y) _Paste2(z, implement)(y)
  46. #define declare2(z, y, x) _Paste2(z, declare2)(y, x)
  47. #define implement2(z, y, x) _Paste2(z, implement2)(y, x)
  48.  
  49. // macros for declaring error-handling functions
  50. extern _RTLENTRY genericerror(int, char _FAR *);    // not implemented ***
  51. typedef int _RTLENTRY (_FAR *GPT)(int, char _FAR *);
  52. #define set_handler(gen, tp, z) _Paste4(set_, tp, gen, _handler)(z)
  53. #define errorhandler(gen, tp) _Paste3(tp, gen, handler)
  54. #define callerror(gen, tp, z, y) (*errorhandler(gen, tp))(z, y)
  55.  
  56. /*
  57.  * function genericerror is not documented in the AT&T release, and
  58.  * is not supplied.  If you can document any expected behavior, we
  59.  * will try to adjust our implementation accordingly.
  60.  */
  61.  
  62. #if !defined(RC_INVOKED)
  63.  
  64. #if defined(__STDC__)
  65. #pragma warn .nak
  66. #endif
  67.  
  68. #endif
  69.  
  70. #endif  /* __GENERIC_H */
  71.  
  72.