Método de interface estranho para o Iterator de ponto

Eu preciso iterar sobre pontos específicos do retângulo de perímetro (em alguns casos, eu preciso iterar sobre uma linha desse retângulo; em outros casos, eu preciso iterar sobre todo o retângulo). Eu tenho uma interface PointIterator.

struct Point
{
   double x,y
}
class PointIteratorI
{
     virtual void next() =0;
     virtual void isOver() =0;
     virtual Point& getPoint() = 0;
}

no caso de iterar sobre uma linha

class LineIterator:public PointIterator
{
....
}

no caso de iterar sobre o perímetro do retângulo

class PerimeterIterator:public PointIterator
{
   ....
}

No caso do LineIterator, também preciso do tipo de linha (horizontal ou vertical, o retângulo possui 2 linhas horizontais e 2 linhas verticais). Mas uma interface como "getLineType" é estranha para o tipo LineIterator. Parece que este método não é para esta classe. Como nesse caso, a classe LineIterator será responsável pela iteração e direção. Está quebrando o princípio de responsabilidade única.

Eu pensei em diferentes interfaces como:

class LineObjectI
{
 public:
    virtual LineType getLineType() = 0;
    .....
}
class LineIterator:public PointIterator, public LineObjectI
{
protected:
    virtual  LineType getLineType() = 0;
....
}

por ocultar essa interface. Quero saber se existe uma maneira melhor de verificar o tipo de linha no LineIterator.

questionAnswers(1)

yourAnswerToTheQuestion