Допустим, у меня есть базовый класс 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);
Итак, природа методы аналогичны, но типы возвращаемых данных / входные параметры отличаются. Если я разработаю интерфейс для сохранения согласованности, я могу определить только операцию удаления там. В качестве альтернативы я могу думать о наборе независимых классов без каких-либо отношений друг с другом (конечно, без реализаций интерфейса), но я не думаю, что это хороший дизайн.
- Какой подход я могу использовать для реализации этого?
- Я новичок в общих интерфейсах. Помогает ли это в этом случае? Если так, я собираюсь изучить и внедрить их. { общедоступные: 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
Я хочу "Торонто" в следующей ячейке.
Ян