Russian Qt Forum
Октябрь 01, 2024, 18:43 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 ... 4 5 [6]   Вниз
  Печать  
Автор Тема: Шаблоны.  (Прочитано 36430 раз)
m_ax
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2095



Просмотр профиля
« Ответ #75 : Март 27, 2012, 19:23 »

Супер поинт - это обычная точка, но с доп возможностями:
Код
C++ (Qt)
class SuperPoint
{
public:
   SuperPoint(const double &x1, const double &x2, const double &x3, const double &x4)
       : _x1(x1), _x2(x2), _x3(x3), _x4(x4) {}
    SuperPoint(const PointF &p) : _x1(p.x), _x2(p.y), _x3(p.z), _x4(0) {}
    SuperPoint(const PointD &p) : _x1(p.x), _x2(p.y), _x3(p.z), _x4(0) {}
    //...
    PointF toPointF() const { return PointF(x1, x2, x3); }
    PointD toPointD() const { return PointD(x1, x2, x3); }
    //....
private:
   double x1, x2, x3, x4;    
};
 
В базовом классе тогда нужно будет определить два метода set и get:
Код
C++ (Qt)
struct base
{
   virtual ~base() {}
   virtual Format format() const = 0;
   virtual SuperPoint get(size_t index) const  = 0;
   virtual void set(size_t index, const SuperPoint &sp) = 0;
};
 
struct derivedF : public base
{
   virtual Format format() const { return TPointF; }
   virtual SuperPoint get(size_t index) const {
       return SuperPoint(vector[index]);
   }
   virtual void set(size_t index, const SuperPoint &sp) {
       vector[index] = sp.toPointF();
   }
   std::vector<PointF> vector;
};
 
// ...
 

Останется только адаптер написать.
В c++11, за счёт того, что там появилась такая фича, как constexpr, его можно было бы особенно изящно реализовать... (без всяких switch)
« Последнее редактирование: Март 27, 2012, 19:42 от m_ax » Записан

Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..

Arch Linux Plasma 5
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #76 : Март 27, 2012, 20:05 »

А зачем мне еще какой-то адаптер? Просто так
Код
C++ (Qt)
template <class T>
class CoordVecT : public CoordVec {
virtual TBigPoint Get( size_t index ) const { return mData[index]; }
virtual void Set( size_t index, const TBigPoint & pt ) { mData[index] = pt; }
..
vector <T> mData;
};
 
Ну операторы для всех базовых определить (для переливания в TBigPoint и обратно). Вот и все
Записан
m_ax
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2095



Просмотр профиля
« Ответ #77 : Март 27, 2012, 20:18 »

Цитировать
А зачем мне еще какой-то адаптер? Просто так
Может и незачем.. Хотя кто Вас знает) Сегодня не надо, а завтра будет надо)

Цитировать
Ну операторы для всех базовых определить (для переливания в TBigPoint и обратно). Вот и все
Не стоит делать так, чтоб к интерфейсу базовых точек PointF, PointD примешивался ещё и интерфейс SuperPoint. Они не должны о нём ничего знать.
Только SuperPoint (он же BigPoint) может знать о них..

Иначе идейная чистота нарушается)   
Записан

Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..

Arch Linux Plasma 5
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #78 : Март 27, 2012, 20:37 »

Не стоит делать так, чтоб к интерфейсу базовых точек PointF, PointD примешивался ещё и интерфейс SuperPoint. Они не должны о нём ничего знать.
Только SuperPoint (он же BigPoint) может знать о них..
Не вижу чем это мне грозит

Иначе идейная чистота нарушается)   
Ничего, я это переживу  Улыбающийся

А вот такая деталька: ведь SuperPoint может знать из чего он получен. Это никак не связано с темой, просто может (в будущем, при случае) удастся задействовать в корыстных целях
Записан
m_ax
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2095



Просмотр профиля
« Ответ #79 : Март 27, 2012, 20:53 »

Цитировать
Не вижу чем это мне грозит
Это лишние связи, которые ничего, кроме синтаксического сахара не дают.. Но за этот сомнительный сахар придётся платить лишим кодом в каждой базовой точке.

Цитировать
А вот такая деталька: ведь SuperPoint может знать из чего он получен. Это никак не связано с темой, просто может (в будущем, при случае) удастся задействовать в корыстных целях
 
Тогда это уже будет жирная точка)
Записан

Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..

Arch Linux Plasma 5
Страниц: 1 ... 4 5 [6]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.199 секунд. Запросов: 23.