chrisben wrote:
Here are sample codes from Thinking in C++ Vol I, page 776
// A function template:
template<class Iter>
void drawAll(Iter start, Iter end) {
while(start != end) {
(*start)->draw();
start++;
}
}
What I do not understand is line
(*start)->draw();
If Iter is a pointer, should that be start->draw(), instead of
(*start)?
Obviously, Iter is intended to be analogous to a double pointer - a
pointer into a collection of pointers to objects (perhaps smart
pointers). Something along the lines of:
class Shape {
public:
virtual void draw() = 0;
};
class Circle : public Shape {
public:
void draw();
};
class Square : public Shape {
public:
void draw();
};
vector<Shape*> shapes;
shapes.push_back(new Circle);
shapes.push_back(new Square);
drawAll(shapes.begin(), shapes.end());
--
With best wishes,
Igor Tandetnik
With sufficient thrust, pigs fly just fine. However, this is not
necessarily a good idea. It is hard to be sure where they are going to
land, and it could be dangerous sitting under them as they fly
overhead. -- RFC 1925