5 / 5 / 0
Регистрация: 16.05.2012
Сообщений: 178
|
||||||
1 | ||||||
Побег из темницы типов (смесь шаблонов Pimpl и Double dispatch)05.12.2018, 11:43. Показов 1032. Ответов 10
Метки нет (Все метки)
Добрый день! Нашёл на хабре интересную статью про побег из темницы типов (смесь шаблонов Pimpl и Double dispatch), но пока не могу осуществить сей побег, так как пример, приведённый там, у меня даже не компилируется. Статья тут.
Пример, который я пытаюсь запустить такой:
Для компиляции использую Qt Creator с настройками: TEMPLATE = app CONFIG += console c++17 CONFIG -= app_bundle CONFIG -= qt SOURCES += \ main.cpp Компилятор - MinGW 32bit Ошибки следующие:
0
|
05.12.2018, 11:43 | |
Ответы с готовыми решениями:
10
Перевод типов в double Преобразование типов: строки в double Преобразование типов String->Double Деление типов float double |
18902 / 9860 / 2410
Регистрация: 30.01.2014
Сообщений: 17,306
|
|
05.12.2018, 11:52 | 2 |
Ваш пример компилируется, но не линкуется из-за отсутствия определений некоторых функций (линковщик вам их все обозначил). Добавьте их и все будет нормально.
Очевидно, что статья не ставила целью дать рабочий исходный код, а лишь демонстрировала идею. Т.е. читатель должен был уловить суть и повторить такое у себя самостоятельно, а не списывать пример из статьи. Ну это в идеале.
0
|
5 / 5 / 0
Регистрация: 16.05.2012
Сообщений: 178
|
||||||
05.12.2018, 13:21 [ТС] | 3 | |||||
DrOffset, Спасибо! Запустить удалось с тривиальным наполнением методов класса object. Но теперь не совсем понятно, как проксировать методы класса data через методы object. В текущем примере так не работает:
0
|
18902 / 9860 / 2410
Регистрация: 30.01.2014
Сообщений: 17,306
|
|
05.12.2018, 13:27 | 4 |
Реализация должна быть в cpp. В том месте, где уже доступно определение object::data.
0
|
5 / 5 / 0
Регистрация: 16.05.2012
Сообщений: 178
|
||||||
05.12.2018, 16:42 [ТС] | 5 | |||||
Разнести классы по файлам удалось, но теперь непонятно, как реализовать методы класса flower. Член object::m_data то закрытый. Не подскажите как быть?
0
|
5 / 5 / 0
Регистрация: 16.05.2012
Сообщений: 178
|
|
06.12.2018, 17:09 [ТС] | 6 |
Добрый вечер! Вроде всё собралось, заработало. Сделал по примерам из статьи и при помощи ваших советов. Спасибо! Единственный нюанс, привести значение объекта типа object к значению нативного типа при помощи конструкции
"template <typename value_type> value_type object::to() const;". Вот в этом загвоздка. Может знает как одолеть? Об таком методе речь идёт в комментариях к статье. Спасибо!
0
|
5 / 5 / 0
Регистрация: 16.05.2012
Сообщений: 178
|
||||||
06.12.2018, 19:44 [ТС] | 8 | |||||
DrOffset, Мне очень нужно довести этот код до логической точки (конечно промежуточной), поэтому буду очень благодарен в помощи реализации:
Я думал сделать этот метод виртуальным в базовом классе, но шаблонные методы не могут быть виртуальными.
0
|
18902 / 9860 / 2410
Регистрация: 30.01.2014
Сообщений: 17,306
|
|
06.12.2018, 20:52 | 9 |
Если только вы целиком скинете что у вас получилось.
Добавлено через 57 минут Юрий Ч, вы ссылку выше смотрели?
0
|
5 / 5 / 0
Регистрация: 16.05.2012
Сообщений: 178
|
|||||||||||||||||||||||||||||||||||||||||||||||||||
07.12.2018, 07:15 [ТС] | 10 | ||||||||||||||||||||||||||||||||||||||||||||||||||
Доброе утро!
DrOffset, Скидываю файлы проекта, архив проекта в самом низу.
0
|
18902 / 9860 / 2410
Регистрация: 30.01.2014
Сообщений: 17,306
|
||||||||||||||||
09.12.2018, 15:43 | 11 | |||||||||||||||
Юрий Ч,
0
|
09.12.2018, 15:43 | |
09.12.2018, 15:43 | |
Помогаю со студенческими работами здесь
11
Ошибки error C2296: -: недопустимо, левый операнд имеет тип "double (__cdecl *)(double,double,double Конфликт типов (int, double, bool) Диапазон значений типов float, double Преобразование типов. Откуда берётся double? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |