Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class Object; //forward declaration
- struct Init {
- void Initialize(Object& object);
- int property1;
- double property2;
- string property3;
- };
- class Object{
- static Init init;
- public:
- Object(){
- init.Initialize(*this);
- }
- };
- template<typename Object>
- class World {
- std::vector<Object> _internal_container;
- size_t _size;
- public:
- World(size_t size) : _size(size) { _internal_container.reserve(_size); };
- template<typename... Args>
- init_objects(const Args&... args){
- for(size_t i = 0; i < _size; ++i) _internal_container.emplace_back( Object(args) );
- }
- }
- template<typename Object>
- class World {
- std::vector<Object> objects;
- // size_t _size; // << size removed
- public:
- World(size_t size) : objects(size) // use default constructor
- {}
- template<typename P> // << changed here
- void apply(P predicate) { // << change here
- std::for_each(objects.begin(), objects.end(), predicate); // << and here
- }
- };
- World w{10}; // create 10 objects with default values
- w.apply([](object& o) { o.set_xyz(10); o.set_yyy(20); });
- template<typename O> class World {
- std::vector<O> objects;
- public:
- World(std::vector<O> obj) : objects{std::move(obj)} {}
- // eventually define apply function here
- };
- template<typename O, typename... Args>
- World<O> make_world(size_t size, const Args&... args){
- std::vector<O> objects{size};
- for(auto& o: objects)
- { /* set arguments here */ }
- return World<O>{std::move(objects)};
- }
- struct Length { int length; Length(int l) : length{l} {} };
- World<Length> make_length_world(size_t size, int default_length)
- {
- std::vector<Length> values;
- for(size_t index = 0; index < size; ++index)
- values.emplace_back(default_length);
- return World<Length>{std::move(values)};
- }
- struct Person {
- std::string first_name; std::string last_name;
- Person(std::string first, std::string last)
- : first_name{std::move(first)}, last_name{std::move(last)} {}
- };
- World<Person> make_robert_paulson_world(size_t size)
- // "his name is Robert Paulson"
- // so don't pass name as parameter
- {
- std::vector<Person> values;
- for(size_t index = 0; index < size; ++index)
- values.emplace_back("Robert", "Paulson");
- return World<Person>{std::move(values)};
- }
- template<typename FactoryType>
- class World {
- private:
- std::vector<Object> _internal_container;
- public:
- World(size_t objectCount){
- FactoryType factory; // of course you could store this in a field if you need.
- for(size_t i = 0; i < objectCount; ++i)
- _internal_container.emplace_back( factory.getDefaultObject() );
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement