fork download
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. class Worker;
  5.  
  6. class SomeClass
  7. {
  8. void* data;
  9. public:
  10. template<class T> void* GetData(const T*)
  11. {
  12. enum { eTEST_FRIEND = T::eFRIEND_SOMECLASS };
  13. return data;
  14. }
  15. };
  16.  
  17. struct IWorker
  18. {
  19. enum { eFRIEND_SOMECLASS =1 };
  20. };
  21.  
  22. class Worker1:public IWorker
  23. {
  24. SomeClass* object;
  25. public:
  26. void doSomeWork(){ clear(object->GetData(this)); }
  27. void clear(void*) { cout<<"Worker1: clear data success\n"; }
  28. };
  29.  
  30. class Worker2:public IWorker
  31. {
  32. SomeClass* object;
  33. public:
  34. void doSomeWork(){ clear(object->GetData(this)); }
  35. void clear(void*) { cout<<"Worker2: clear data success\n"; }
  36. };
  37.  
  38. int main() {
  39. // your code goes here
  40.  
  41.  
  42. Worker1().doSomeWork();
  43. Worker2().doSomeWork();
  44.  
  45. return 0;
  46. }
Success #stdin #stdout 0s 3296KB
stdin
Standard input is empty
stdout
Worker1: clear data success
Worker2: clear data success