fork download
  1. #include <iostream>
  2. #include <unordered_set>
  3.  
  4. struct A
  5. {
  6. A() { objects.insert(this) ; /* ... */ }
  7. A( const A& ) : A() { /* ... */ }
  8. A( A&& ) : A() { /* ... */ }
  9. ~A() { /* ... */ objects.erase(this) ; }
  10.  
  11. template< typename FN > static void for_each_instance( FN fn )
  12. { for( A* p : objects ) fn(p) ; }
  13.  
  14. void foo( int i, char c )
  15. { std::cout << "A::foo( " << this << ", " << i << ", " << c << " )\n" ; }
  16.  
  17. void bar( double d ) const { std::cout << "A::bar( " << d << " )\n" ; }
  18.  
  19. static std::unordered_set<A*> objects ;
  20. };
  21.  
  22. std::unordered_set<A*> A::objects ;
  23.  
  24. int main()
  25. {
  26. std::size_t n ;
  27. std::cout << "how many? " && std::cin >> n ;
  28. while( n-- ) new A() ;
  29.  
  30. A::for_each_instance( []( A* p ) { p->foo( 99, 'X' ) ; } ) ;
  31. A::for_each_instance( []( A* p ) { p->bar( 12.8 ) ; } ) ;
  32. A::for_each_instance( []( A* p ) { delete p ; } ) ;
  33. }
  34.  
Success #stdin #stdout 0s 2992KB
stdin
7
stdout
how many? A::foo( 0x942e128, 99, X )
A::foo( 0x942e108, 99, X )
A::foo( 0x942e0e8, 99, X )
A::foo( 0x942e0c8, 99, X )
A::foo( 0x942e0a8, 99, X )
A::foo( 0x942e088, 99, X )
A::foo( 0x942e068, 99, X )
A::bar( 12.8 )
A::bar( 12.8 )
A::bar( 12.8 )
A::bar( 12.8 )
A::bar( 12.8 )
A::bar( 12.8 )
A::bar( 12.8 )