Предоставление реализации функции более одного имени в c ++

Допустим, у меня есть базовый класс 2D-векторов вроде

class vector2
{
  int x, y;
}

, эти два значения могут использоваться для представления положения, а также ширины и высоты. С ++ предоставляет мне возможность реализовать такую ​​функцию, как vector2 :: getXpos () , а затем также определить vector2 :: getWidth () и использовать ту же реализацию.

Я знаю, что могу просто встроить обе эти функции, но компилятор может решить не встроить эти функции. поэтому, если getWidth просто вызвал getXpos , вы получите два вызова функций.

Более реалистичный пример того, для чего я хотел бы использовать это, - getLength () и эээ ... сетка = новый Slick.Grid ($ ("# myGrid"), данные, столбцы, параметры); В ClassA есть такие методы. void Add (строка str); В ClassA есть такие методы. void Add (строка str); void ...

Есть такая проблема дизайна.

Предположим, у вас есть набор классов, реализующих похожие методы, но не идентичные.

Пример: ClassA имеет такие методы.

void Add(string str);
void Delete(string str);
List GetInfo(string name);

Другой класс, ClassB, имеет следующие методы.

void Add(Dictionary Info);
void Delete(string str);
Dictionary GetInfo(string name);

Итак, природа методы аналогичны, но типы возвращаемых данных / входные параметры отличаются. Если я разработаю интерфейс для сохранения согласованности, я могу определить только операцию удаления там. В качестве альтернативы я могу думать о наборе независимых классов без каких-либо отношений друг с другом (конечно, без реализаций интерфейса), но я не думаю, что это хороший дизайн.

  1. Какой подход я могу использовать для реализации этого?
  2. Я новичок в общих интерфейсах. Помогает ли это в этом случае? Если так, я собираюсь изучить и внедрить их. { общедоступные: CGarage (); ~ CGarage (); typedef std :: vector CarCollection; ...

    В своей повседневной работе я часто пишу классы, как в этом упрощенном примере:

    class CGarage
    {
    public:
        CGarage();
        ~CGarage();
        typedef std::vector CarCollection;
    
    private:
        CarCollection m_Cars;
    };
    

    Я хочу, чтобы пользователи CGarage могли только читать доступ к коллекции CarCollection. Для достижения этой цели есть несколько общих решений, которые все не очень удовлетворяют:

    Решение 1

    class CGarage
    {
        Car GetCar(CarCollection::size_type index) const;
        CarCollection::size_type CarCount() const;
    };
    

    Главный недостаток:

    • Из-за отсутствия итераторов я не могу использовать алгоритмы STL в Cars (например, for_each (. ..))

    Решение 2

    class CGarage
    {
        CarCollection::const_iterator CarBegin() const;
        CarCollection::const_iterator CarEnd() const;
        CarCollection::size_type CarCount() const;
    };
    

    Главный недостаток: Торонто - это ...

    Excel: какую функцию я могу использовать, чтобы взять все символы от начала до первого '

    Например:

    A1
    Toronto is nice
    

    Я хочу "Торонто" в следующей ячейке.

    Ян

14
задан Lance Roberts 25 November 2010 в 07:32
поделиться