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

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

Страниц: 1 2 [3] 4   Вниз
  Печать  
Автор Тема: Про templat  (Прочитано 20850 раз)
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #30 : Май 07, 2017, 22:53 »

Имхо, xml структура для такого файла здесь уместнее.
Ладно, удачи.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #31 : Май 08, 2017, 11:45 »

Спасибо. Это намотаю на ус. Думаю, пригодится, когда буду рефакторить эту писанину. Сейчас просто времени очень мало. Приходится лепить с листа. Качество кода меня лично удручает, но такими темпами я лучше не способен. Очень надеюсь, что будет возможность потом все это причесать.
Весьма слабые угрызения совести Улыбающийся

Вот пример такого файла, если интересно
Ага, ну я так и знал, Вы совершенно напрасно связались с темплейтами, здесь прямо-таки напрашивается QVariant. Или др реализация variant, возможно даже на темплейтах но уже делающая много черновой работы которую сейчас Вам нужно реализовывать самому

Записан
Ced
Гость
« Ответ #32 : Май 08, 2017, 11:51 »

Цитировать
Ага, ну я так и знал, Вы совершенно напрасно связались с темплейтами, здесь прямо-таки напрашивается QVariant. Или др реализация variant, возможно даже на темплейтах но уже делающая много черновой работы которую сейчас Вам нужно реализовывать самому

Не сомневаюсь, что мною выбран не лучший вариант реализации. Причина в следующем: С шаблонами я раньше не работал, но понимаю, что это такое. Про QVariant  я пока не знаю ничего. Времени на изучение сейчас у меня нет. Я рассчитываю сделать вариант "на коленке", а после получить время на рефакторинг. Некоторые ошибки в коде я делаю намеренно, чтобы у заказчика не было возможности сказать "Работает и ладно". Смешно? - Думаю, не всем. В такой ситуации работают многие программисты. Не многие решаются попытаться ее изменить. Я решил попробовать.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #33 : Май 08, 2017, 12:40 »

Не сомневаюсь, что мною выбран не лучший вариант реализации. Причина в следующем: С шаблонами я раньше не работал, но понимаю, что это такое. Про QVariant  я пока не знаю ничего. Времени на изучение сейчас у меня нет.
А вот время на эксперименты с темплейтами нашлось, по Вашим же словам бились 3 дня. Собственно в этом их опасность и есть. Вещь сама по себе неплохая, иногда даже необходимая. Но очень часто она увлекает программиста в мифический мир обобщений. Масса времени уходит на то как же пристроить всякие "хитросплетения". Наконец все получилось, ура! Пройдет эдак полгода, глянешь опять этот код - ничего хорошего, иной раз и сам забыл что хотел.

Я рассчитываю сделать вариант "на коленке", а после получить время на рефакторинг. Некоторые ошибки в коде я делаю намеренно, чтобы у заказчика не было возможности сказать "Работает и ладно". Смешно? - Думаю, не всем. В такой ситуации работают многие программисты. Не многие решаются попытаться ее изменить. Я решил попробовать.
А в чем заключается Ваше (мужественное) решение изменить? Пока ни в чем, просто тешите себя надеждами. Жизнь покажет..
Записан
Ced
Гость
« Ответ #34 : Май 08, 2017, 12:49 »

Согласен. Жизнь покажет:)
Записан
Ced
Гость
« Ответ #35 : Май 09, 2017, 01:09 »

И снова я к Вам с вопросом

Код
C++ (Qt)
template <typename T>
class X : public BaseElement
{
};
 
QVector<BaseElement *> * ptrY = new QVector<BaseElement *> (n);
(*ptrY)[0] = new X<float>(..);
 

Реализовал такую схему. А как теперь через элементы QVector добраться до свойств или методов объектов класса Х? Я из не вижу.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #36 : Май 09, 2017, 04:49 »

Реализовал такую схему. А как теперь через элементы QVector добраться до свойств или методов объектов класса Х?
А какие методы (зависящие от темплейт типа) нужны? Не хочу показаться навязчивым, но если время поджимает то лучше соскочить на QVariant, выглядит примерно так
Код
C++ (Qt)
class Parametr {
...
QString m_name, m_comment;
QVariant m_value;
...
};
 
QList<Parametr> theParamList;
theParamList << Parametr("name", "comment", QVariant((float) value));
...
 
Заметьте как стало "приятнее". Можно спокойно копировать как сам theParamList, так и его элементы. А в варианте с темплейт для этого нужно приложить усилия.

Или хотите все-таки "помучить котов"?  Улыбающийся
Записан
Ced
Гость
« Ответ #37 : Май 09, 2017, 12:01 »

А какие методы (зависящие от темплейт типа) нужны? [/quote]

Код:
class ParametrName
{
private:
        int  type;
        int  sorce;
      float  multiplier;
    QString  name;
    QString  discription;
    QString  dimension;

public:
    ParametrName (QTextStream &input);
    ParametrName (const ParametrName& toCopy);

        int  getType        ();
        int  getSorce       ();
      float  getMultiplier  ();
    QString  getDimension   ();
    QString  getName        ();
    QString  getDiscription ();

    void  setType        (    int  toSet);
    void  setSorce       (    int  toSet);
    void  setMultiplier  (  float  toSet);
    void  setDimension   (QString  toSet);
    void  setName        (QString  toSet);
    void  setDiscription (QString  toSet);
};

template <typename T> class MyQueueBuffer
{
private:
    int  bufferLength;
    QQueue<MyData<T>> myQueueBuffer;
public:
    MyQueueBuffer<T> (const MyQueueBuffer <T>& toCopy);
    MyQueueBuffer<T> (int  length);

       T  dequeue();
    void  enqueue(const T &t);
};

template <typename T> MyQueueBuffer<T>::MyQueueBuffer (const MyQueueBuffer <T>& toCopy)
{
    bufferLength  = toCopy.bufferLength;
    myQueueBuffer = toCopy.myQueueBuffer;
}

template <typename T> MyQueueBuffer<T>::MyQueueBuffer (int  length)
{
    bufferLength = length;
}

template <typename T>class Parametr : public ParametrName
{
public:
    enum
    {
        continuous    = 0,
        discreteYesNo = 1,
        time          = 2,
        dateTime      = 3
    } parametrTypes;

    enum
    {
        measured           = 0,
        calculated         = 1,
        calculatedExternal = 2
    } parametrSource;

private:
                   T  minPossibleValue;
                   T  maxPossibleValue;
                   T  minMarginalValue;
                   T  maxMarginalValue;

    MyQueueBuffer<T> *buffer;
public:
    Parametr<T> (const Parametr <T>& toCopy);
    Parametr<T> (const ParametrName& toCopy);
    Parametr<T> (QTextStream &input, ParametrName const& toCopy);

       T  getMinPossibleValue ();
       T  getMaxPossibleValue ();
       T  getMinMarginalValue ();
       T  getMaxMarginalValue ();

    void  setMinPossibleValue (T  minToSet);
    void  setMaxPossibleValue (T  maxToSet);
    void  setMinMarginalValue (T  minToSet);
    void  setMaxMarginalValue (T  maxToSet);

    void  initBuffer (int  length);
};

Нужен доступ к
Код:
          MyQueueBuffer<T> *buffer,                    T  minPossibleValue;
                   T  maxPossibleValue;
                   T  minMarginalValue;
                   T  maxMarginalValue;
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #38 : Май 09, 2017, 13:25 »

Нужен доступ к
Т.е. к тому что разрисовали геттерами/сеттерами. Объявляете чистый виртуал в базовом классе, напр
Код
C++ (Qt)
class ParametrName {
..
virtual double getMinPossibleValue( void ) = 0;
..
};
 
И реализуете его в template наследнике
Код
C++ (Qt)
template <typename T>
class Parametr : public ParametrName {
..
double getMinPossibleValue( void ) override { return minPossibleValue; }
..
};
 
Если понадобится выписываете частичную специализацию
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #39 : Май 09, 2017, 13:35 »

Объявляете чистый виртуал в базовом классе, напр
А какой смысл в этом виртуале? Для чего его переопределять в потомке (шаблоне!), если все равно типы максимума/минимума всегда ограничены double?
« Последнее редактирование: Май 09, 2017, 13:39 от Old » Записан
Ced
Гость
« Ответ #40 : Май 09, 2017, 13:38 »

Объявляете чистый виртуал в базовом классе, напр
А какой смысл в этом виртуале? Для чего его переопределять в потомке (шаблоне!), если все равно типы максимума/минимума все равно ограничены double?

А что меняется от типа?
Записан
Ced
Гость
« Ответ #41 : Май 09, 2017, 13:39 »

Нужен доступ к
Т.е. к тому что разрисовали геттерами/сеттерами. Объявляете чистый виртуал в базовом классе, напр
Код
C++ (Qt)
class ParametrName {
..
virtual double getMinPossibleValue( void ) = 0;
..
};
 
И реализуете его в template наследнике
Код
C++ (Qt)
template <typename T>
class Parametr : public ParametrName {
..
double getMinPossibleValue( void ) override { return minPossibleValue; }
..
};
 
Если понадобится выписываете частичную специализацию

Значит мне под каждый возможный тип определять отдельную виртуальную функцию?
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #42 : Май 09, 2017, 13:40 »

А что меняется от типа?
Не знаю, что у вас меняется от типа? Для чего-то вы шаблон завели? Улыбающийся
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #43 : Май 09, 2017, 13:42 »

Значит мне под каждый возможный тип определять отдельную виртуальную функцию?
Это если вы ходите сделать максимально плохо. 
Записан
Ced
Гость
« Ответ #44 : Май 09, 2017, 13:44 »

А что меняется от типа?
Не знаю, что у вас меняется от типа? Для чего-то вы шаблон завели? Улыбающийся

Я вот в каком смысле: Что значит "...ограничены double"? Имеется ввиду, он самый длинный из используемых? или что-то иное?
Записан
Страниц: 1 2 [3] 4   Вверх
  Печать  
 
Перейти в:  


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