Advertisement
Guest User

Untitled

a guest
Apr 16th, 2014
41
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.57 KB | None | 0 0
  1. class Object; //forward declaration
  2. struct Init {
  3. void Initialize(Object& object);
  4. int property1;
  5. double property2;
  6. string property3;
  7. };
  8.  
  9. class Object{
  10. static Init init;
  11. public:
  12. Object(){
  13. init.Initialize(*this);
  14. }
  15. };
  16.  
  17. template<typename Object>
  18. class World {
  19. std::vector<Object> _internal_container;
  20. size_t _size;
  21. public:
  22. World(size_t size) : _size(size) { _internal_container.reserve(_size); };
  23.  
  24. template<typename... Args>
  25. init_objects(const Args&... args){
  26. for(size_t i = 0; i < _size; ++i) _internal_container.emplace_back( Object(args) );
  27. }
  28. }
  29.  
  30. template<typename Object>
  31. class World {
  32. std::vector<Object> objects;
  33. // size_t _size; // << size removed
  34. public:
  35. World(size_t size) : objects(size) // use default constructor
  36. {}
  37.  
  38. template<typename P> // << changed here
  39. void apply(P predicate) { // << change here
  40. std::for_each(objects.begin(), objects.end(), predicate); // << and here
  41. }
  42. };
  43.  
  44. World w{10}; // create 10 objects with default values
  45. w.apply([](object& o) { o.set_xyz(10); o.set_yyy(20); });
  46.  
  47. template<typename O> class World {
  48. std::vector<O> objects;
  49. public:
  50. World(std::vector<O> obj) : objects{std::move(obj)} {}
  51. // eventually define apply function here
  52. };
  53.  
  54. template<typename O, typename... Args>
  55. World<O> make_world(size_t size, const Args&... args){
  56. std::vector<O> objects{size};
  57. for(auto& o: objects)
  58. { /* set arguments here */ }
  59. return World<O>{std::move(objects)};
  60. }
  61.  
  62. struct Length { int length; Length(int l) : length{l} {} };
  63.  
  64. World<Length> make_length_world(size_t size, int default_length)
  65. {
  66. std::vector<Length> values;
  67. for(size_t index = 0; index < size; ++index)
  68. values.emplace_back(default_length);
  69. return World<Length>{std::move(values)};
  70. }
  71.  
  72. struct Person {
  73. std::string first_name; std::string last_name;
  74. Person(std::string first, std::string last)
  75. : first_name{std::move(first)}, last_name{std::move(last)} {}
  76. };
  77.  
  78.  
  79. World<Person> make_robert_paulson_world(size_t size)
  80. // "his name is Robert Paulson"
  81. // so don't pass name as parameter
  82. {
  83. std::vector<Person> values;
  84. for(size_t index = 0; index < size; ++index)
  85. values.emplace_back("Robert", "Paulson");
  86. return World<Person>{std::move(values)};
  87. }
  88.  
  89. template<typename FactoryType>
  90. class World {
  91. private:
  92. std::vector<Object> _internal_container;
  93. public:
  94. World(size_t objectCount){
  95. FactoryType factory; // of course you could store this in a field if you need.
  96. for(size_t i = 0; i < objectCount; ++i)
  97. _internal_container.emplace_back( factory.getDefaultObject() );
  98. }
  99. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement